elftools 1.0.1 → 1.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
- data/lib/elftools/constants.rb +122 -78
- data/lib/elftools/dynamic.rb +5 -1
- data/lib/elftools/elf_file.rb +8 -0
- data/lib/elftools/lazy_array.rb +1 -0
- data/lib/elftools/note.rb +4 -1
- data/lib/elftools/sections/relocation_section.rb +1 -0
- data/lib/elftools/sections/sym_tab_section.rb +1 -0
- data/lib/elftools/structs.rb +1 -0
- data/lib/elftools/util.rb +4 -0
- data/lib/elftools/version.rb +1 -1
- metadata +9 -23
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: d224322bce7543153f1df63cc56b4c41c57825527f484fd6ff8893c85e939496
|
4
|
+
data.tar.gz: 6ff32495c229e034faabcd026eb47cf05fcdc7d737430075cdb0feb24548ef6b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 46d10fef9a58529af0a3838357f222f009a2b6e466a0a588933eccb182a8df4f785643d2f32909158e14bafb8dce026d3237afe2e5089ffe69a2f1a545a294e7
|
7
|
+
data.tar.gz: 6f4e7af4e07511edc99b0ef49cae2617edddb1a19097082674435a87dcbd471ebcff412525e8a862f1cec5206c1034911985863b7e66ba60cd47b650c099c559
|
data/lib/elftools/constants.rb
CHANGED
@@ -6,49 +6,42 @@ module ELFTools
|
|
6
6
|
# ELF magic header
|
7
7
|
ELFMAG = "\x7FELF".freeze
|
8
8
|
|
9
|
-
#
|
10
|
-
module
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
SHT_HASH = 5 # symbol hash table
|
17
|
-
SHT_DYNAMIC = 6 # information of dynamic linking
|
18
|
-
SHT_NOTE = 7 # note section
|
19
|
-
SHT_NOBITS = 8 # section occupies no space
|
20
|
-
SHT_REL = 9 # relocation
|
21
|
-
SHT_SHLIB = 10 # reserved
|
22
|
-
SHT_DYNSYM = 11 # symbols for dynamic
|
23
|
-
# Values between {SHT_LOPROC} and {SHT_HIPROC} are reserved for processor-specific semantics.
|
24
|
-
SHT_LOPROC = 0x70000000
|
25
|
-
SHT_HIPROC = 0x7fffffff # see {SHT_LOPROC}
|
26
|
-
# Values between {SHT_LOUSER} and {SHT_HIUSER} are reserved for application programs.
|
27
|
-
SHT_LOUSER = 0x80000000
|
28
|
-
SHT_HIUSER = 0xffffffff # see {SHT_LOUSER}
|
29
|
-
end
|
30
|
-
include SHT
|
9
|
+
# Values of `d_un.d_val' in the DT_FLAGS and DT_FLAGS_1 entry.
|
10
|
+
module DF
|
11
|
+
DF_ORIGIN = 0x00000001 # Object may use DF_ORIGIN
|
12
|
+
DF_SYMBOLIC = 0x00000002 # Symbol resolutions starts here
|
13
|
+
DF_TEXTREL = 0x00000004 # Object contains text relocations
|
14
|
+
DF_BIND_NOW = 0x00000008 # No lazy binding for this object
|
15
|
+
DF_STATIC_TLS = 0x00000010 # Module uses the static TLS model
|
31
16
|
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
17
|
+
DF_1_NOW = 0x00000001 # Set RTLD_NOW for this object.
|
18
|
+
DF_1_GLOBAL = 0x00000002 # Set RTLD_GLOBAL for this object.
|
19
|
+
DF_1_GROUP = 0x00000004 # Set RTLD_GROUP for this object.
|
20
|
+
DF_1_NODELETE = 0x00000008 # Set RTLD_NODELETE for this object.
|
21
|
+
DF_1_LOADFLTR = 0x00000010 # Trigger filtee loading at runtime.
|
22
|
+
DF_1_INITFIRST = 0x00000020 # Set RTLD_INITFIRST for this object
|
23
|
+
DF_1_NOOPEN = 0x00000040 # Set RTLD_NOOPEN for this object.
|
24
|
+
DF_1_ORIGIN = 0x00000080 # $ORIGIN must be handled.
|
25
|
+
DF_1_DIRECT = 0x00000100 # Direct binding enabled.
|
26
|
+
DF_1_TRANS = 0x00000200 # :nodoc:
|
27
|
+
DF_1_INTERPOSE = 0x00000400 # Object is used to interpose.
|
28
|
+
DF_1_NODEFLIB = 0x00000800 # Ignore default lib search path.
|
29
|
+
DF_1_NODUMP = 0x00001000 # Object can't be dldump'ed.
|
30
|
+
DF_1_CONFALT = 0x00002000 # Configuration alternative created.
|
31
|
+
DF_1_ENDFILTEE = 0x00004000 # Filtee terminates filters search.
|
32
|
+
DF_1_DISPRELDNE = 0x00008000 # Disp reloc applied at build time.
|
33
|
+
DF_1_DISPRELPND = 0x00010000 # Disp reloc applied at run-time.
|
34
|
+
DF_1_NODIRECT = 0x00020000 # Object has no-direct binding.
|
35
|
+
DF_1_IGNMULDEF = 0x00040000 # :nodoc:
|
36
|
+
DF_1_NOKSYMS = 0x00080000 # :nodoc:
|
37
|
+
DF_1_NOHDR = 0x00100000 # :nodoc:
|
38
|
+
DF_1_EDITED = 0x00200000 # Object is modified after built.
|
39
|
+
DF_1_NORELOC = 0x00400000 # :nodoc:
|
40
|
+
DF_1_SYMINTPOSE = 0x00800000 # Object has individual interposers.
|
41
|
+
DF_1_GLOBAUDIT = 0x01000000 # Global auditing required.
|
42
|
+
DF_1_SINGLETON = 0x02000000 # Singleton symbols are used.
|
50
43
|
end
|
51
|
-
include
|
44
|
+
include DF
|
52
45
|
|
53
46
|
# Dynamic table types, records in +d_tag+.
|
54
47
|
module DT
|
@@ -107,43 +100,6 @@ module ELFTools
|
|
107
100
|
end
|
108
101
|
include DT
|
109
102
|
|
110
|
-
# Values of `d_un.d_val' in the DT_FLAGS and DT_FLAGS_1 entry.
|
111
|
-
module DF
|
112
|
-
DF_ORIGIN = 0x00000001 # Object may use DF_ORIGIN
|
113
|
-
DF_SYMBOLIC = 0x00000002 # Symbol resolutions starts here
|
114
|
-
DF_TEXTREL = 0x00000004 # Object contains text relocations
|
115
|
-
DF_BIND_NOW = 0x00000008 # No lazy binding for this object
|
116
|
-
DF_STATIC_TLS = 0x00000010 # Module uses the static TLS model
|
117
|
-
|
118
|
-
DF_1_NOW = 0x00000001 # Set RTLD_NOW for this object.
|
119
|
-
DF_1_GLOBAL = 0x00000002 # Set RTLD_GLOBAL for this object.
|
120
|
-
DF_1_GROUP = 0x00000004 # Set RTLD_GROUP for this object.
|
121
|
-
DF_1_NODELETE = 0x00000008 # Set RTLD_NODELETE for this object.
|
122
|
-
DF_1_LOADFLTR = 0x00000010 # Trigger filtee loading at runtime.
|
123
|
-
DF_1_INITFIRST = 0x00000020 # Set RTLD_INITFIRST for this object
|
124
|
-
DF_1_NOOPEN = 0x00000040 # Set RTLD_NOOPEN for this object.
|
125
|
-
DF_1_ORIGIN = 0x00000080 # $ORIGIN must be handled.
|
126
|
-
DF_1_DIRECT = 0x00000100 # Direct binding enabled.
|
127
|
-
DF_1_TRANS = 0x00000200 # :nodoc:
|
128
|
-
DF_1_INTERPOSE = 0x00000400 # Object is used to interpose.
|
129
|
-
DF_1_NODEFLIB = 0x00000800 # Ignore default lib search path.
|
130
|
-
DF_1_NODUMP = 0x00001000 # Object can't be dldump'ed.
|
131
|
-
DF_1_CONFALT = 0x00002000 # Configuration alternative created.
|
132
|
-
DF_1_ENDFILTEE = 0x00004000 # Filtee terminates filters search.
|
133
|
-
DF_1_DISPRELDNE = 0x00008000 # Disp reloc applied at build time.
|
134
|
-
DF_1_DISPRELPND = 0x00010000 # Disp reloc applied at run-time.
|
135
|
-
DF_1_NODIRECT = 0x00020000 # Object has no-direct binding.
|
136
|
-
DF_1_IGNMULDEF = 0x00040000 # :nodoc:
|
137
|
-
DF_1_NOKSYMS = 0x00080000 # :nodoc:
|
138
|
-
DF_1_NOHDR = 0x00100000 # :nodoc:
|
139
|
-
DF_1_EDITED = 0x00200000 # Object is modified after built.
|
140
|
-
DF_1_NORELOC = 0x00400000 # :nodoc:
|
141
|
-
DF_1_SYMINTPOSE = 0x00800000 # Object has individual interposers.
|
142
|
-
DF_1_GLOBAUDIT = 0x01000000 # Global auditing required.
|
143
|
-
DF_1_SINGLETON = 0x02000000 # Singleton symbols are used.
|
144
|
-
end
|
145
|
-
include DF
|
146
|
-
|
147
103
|
# These constants define the various ELF target machines.
|
148
104
|
module EM
|
149
105
|
EM_NONE = 0 # none
|
@@ -253,5 +209,93 @@ module ELFTools
|
|
253
209
|
end
|
254
210
|
end
|
255
211
|
include ET
|
212
|
+
|
213
|
+
# Program header types, records in +p_type+.
|
214
|
+
module PT
|
215
|
+
PT_NULL = 0 # null segment
|
216
|
+
PT_LOAD = 1 # segment to be load
|
217
|
+
PT_DYNAMIC = 2 # dynamic tags
|
218
|
+
PT_INTERP = 3 # interpreter, same as .interp section
|
219
|
+
PT_NOTE = 4 # same as .note* section
|
220
|
+
PT_SHLIB = 5 # reserved
|
221
|
+
PT_PHDR = 6 # where program header starts
|
222
|
+
PT_TLS = 7 # thread local storage segment
|
223
|
+
PT_LOOS = 0x60000000 # OS-specific
|
224
|
+
PT_HIOS = 0x6fffffff # OS-specific
|
225
|
+
# Values between {PT_LOPROC} and {PT_HIPROC} are reserved for processor-specific semantics.
|
226
|
+
PT_LOPROC = 0x70000000
|
227
|
+
PT_HIPROC = 0x7fffffff # see {PT_LOPROC}
|
228
|
+
PT_GNU_EH_FRAME = 0x6474e550 # for exception handler
|
229
|
+
PT_GNU_STACK = 0x6474e551 # permission of stack
|
230
|
+
PT_GNU_RELRO = 0x6474e552 # read only after relocation
|
231
|
+
end
|
232
|
+
include PT
|
233
|
+
|
234
|
+
# Section header types, records in +sh_type+.
|
235
|
+
module SHT
|
236
|
+
SHT_NULL = 0 # null section
|
237
|
+
SHT_PROGBITS = 1 # information defined by program itself
|
238
|
+
SHT_SYMTAB = 2 # symbol table section
|
239
|
+
SHT_STRTAB = 3 # string table section
|
240
|
+
SHT_RELA = 4 # relocation with addends
|
241
|
+
SHT_HASH = 5 # symbol hash table
|
242
|
+
SHT_DYNAMIC = 6 # information of dynamic linking
|
243
|
+
SHT_NOTE = 7 # note section
|
244
|
+
SHT_NOBITS = 8 # section occupies no space
|
245
|
+
SHT_REL = 9 # relocation
|
246
|
+
SHT_SHLIB = 10 # reserved
|
247
|
+
SHT_DYNSYM = 11 # symbols for dynamic
|
248
|
+
# Values between {SHT_LOPROC} and {SHT_HIPROC} are reserved for processor-specific semantics.
|
249
|
+
SHT_LOPROC = 0x70000000
|
250
|
+
SHT_HIPROC = 0x7fffffff # see {SHT_LOPROC}
|
251
|
+
# Values between {SHT_LOUSER} and {SHT_HIUSER} are reserved for application programs.
|
252
|
+
SHT_LOUSER = 0x80000000
|
253
|
+
SHT_HIUSER = 0xffffffff # see {SHT_LOUSER}
|
254
|
+
end
|
255
|
+
include SHT
|
256
|
+
|
257
|
+
# Symbol binding from Sym st_info field.
|
258
|
+
module STB
|
259
|
+
STB_LOCAL = 0 # Local symbol
|
260
|
+
STB_GLOBAL = 1 # Global symbol
|
261
|
+
STB_WEAK = 2 # Weak symbol
|
262
|
+
STB_NUM = 3 # Number of defined types.
|
263
|
+
STB_LOOS = 10 # Start of OS-specific
|
264
|
+
STB_GNU_UNIQUE = 10 # Unique symbol.
|
265
|
+
STB_HIOS = 12 # End of OS-specific
|
266
|
+
STB_LOPROC = 13 # Start of processor-specific
|
267
|
+
STB_HIPROC = 15 # End of processor-specific
|
268
|
+
end
|
269
|
+
include STB
|
270
|
+
|
271
|
+
# Symbol types from Sym st_info field.
|
272
|
+
module STT
|
273
|
+
STT_NOTYPE = 0 # Symbol type is unspecified
|
274
|
+
STT_OBJECT = 1 # Symbol is a data object
|
275
|
+
STT_FUNC = 2 # Symbol is a code object
|
276
|
+
STT_SECTION = 3 # Symbol associated with a section
|
277
|
+
STT_FILE = 4 # Symbol's name is file name
|
278
|
+
STT_COMMON = 5 # Symbol is a common data object
|
279
|
+
STT_TLS = 6 # Symbol is thread-local data object
|
280
|
+
STT_NUM = 7 # Number of defined types.
|
281
|
+
|
282
|
+
# GNU extension: symbol value points to a function which is called
|
283
|
+
# at runtime to determine the final value of the symbol.
|
284
|
+
STT_GNU_IFUNC = 10
|
285
|
+
|
286
|
+
STT_LOOS = 10 # Start of OS-specific
|
287
|
+
STT_HIOS = 12 # End of OS-specific
|
288
|
+
STT_LOPROC = 13 # Start of processor-specific
|
289
|
+
STT_HIPROC = 15 # End of processor-specific
|
290
|
+
|
291
|
+
# The section type that must be used for register symbols on
|
292
|
+
# Sparc. These symbols initialize a global register.
|
293
|
+
STT_SPARC_REGISTER = 13
|
294
|
+
|
295
|
+
# ARM: a THUMB function. This is not defined in ARM ELF Specification but
|
296
|
+
# used by the GNU tool-chain.
|
297
|
+
STT_ARM_TFUNC = 13
|
298
|
+
end
|
299
|
+
include STT
|
256
300
|
end
|
257
301
|
end
|
data/lib/elftools/dynamic.rb
CHANGED
@@ -18,6 +18,7 @@ module ELFTools
|
|
18
18
|
# Otherwise, return array of tags.
|
19
19
|
def each_tags(&block)
|
20
20
|
return enum_for(:each_tags) unless block_given?
|
21
|
+
|
21
22
|
arr = []
|
22
23
|
0.step do |i|
|
23
24
|
tag = tag_at(i).tap(&block)
|
@@ -31,7 +32,7 @@ module ELFTools
|
|
31
32
|
# @return [Array<ELFTools::Dynamic::Tag>]
|
32
33
|
# Array of tags.
|
33
34
|
def tags
|
34
|
-
each_tags.to_a
|
35
|
+
@tags ||= each_tags.to_a
|
35
36
|
end
|
36
37
|
|
37
38
|
# Get a tag of specific type.
|
@@ -77,8 +78,10 @@ module ELFTools
|
|
77
78
|
# @return [ELFTools::Dynamic::Tag] The desired tag.
|
78
79
|
def tag_at(n)
|
79
80
|
return if n < 0
|
81
|
+
|
80
82
|
@tag_at_map ||= {}
|
81
83
|
return @tag_at_map[n] if @tag_at_map[n]
|
84
|
+
|
82
85
|
dyn = Structs::ELF_Dyn.new(endian: endian)
|
83
86
|
dyn.elf_class = header.elf_class
|
84
87
|
stream.pos = tag_start + n * dyn.num_bytes
|
@@ -153,6 +156,7 @@ module ELFTools
|
|
153
156
|
# @return [String, nil] The name.
|
154
157
|
def name
|
155
158
|
return nil unless name?
|
159
|
+
|
156
160
|
Util.cstring(stream, @str_offset.call + header.d_val.to_i)
|
157
161
|
end
|
158
162
|
end
|
data/lib/elftools/elf_file.rb
CHANGED
@@ -32,6 +32,7 @@ module ELFTools
|
|
32
32
|
# @return [ELFTools::Structs::ELF_Ehdr] The header.
|
33
33
|
def header
|
34
34
|
return @header if defined?(@header)
|
35
|
+
|
35
36
|
stream.pos = 0
|
36
37
|
@header = Structs::ELF_Ehdr.new(endian: endian, offset: stream.pos)
|
37
38
|
@header.elf_class = elf_class
|
@@ -49,8 +50,10 @@ module ELFTools
|
|
49
50
|
def build_id
|
50
51
|
section = section_by_name('.note.gnu.build-id')
|
51
52
|
return nil if section.nil?
|
53
|
+
|
52
54
|
note = section.notes.first
|
53
55
|
return nil if note.nil?
|
56
|
+
|
54
57
|
note.desc.unpack('H*').first
|
55
58
|
end
|
56
59
|
|
@@ -116,6 +119,7 @@ module ELFTools
|
|
116
119
|
# otherwise, the whole sections will be returned.
|
117
120
|
def each_sections(&block)
|
118
121
|
return enum_for(:each_sections) unless block_given?
|
122
|
+
|
119
123
|
Array.new(num_sections) do |i|
|
120
124
|
section_at(i).tap(&block)
|
121
125
|
end
|
@@ -188,6 +192,7 @@ module ELFTools
|
|
188
192
|
# Whole segments will be returned.
|
189
193
|
def each_segments(&block)
|
190
194
|
return enum_for(:each_segments) unless block_given?
|
195
|
+
|
191
196
|
Array.new(num_segments) do |i|
|
192
197
|
segment_at(i).tap(&block)
|
193
198
|
end
|
@@ -324,6 +329,7 @@ module ELFTools
|
|
324
329
|
explore = lambda do |obj|
|
325
330
|
return obj if obj.is_a?(::ELFTools::Structs::ELFStruct)
|
326
331
|
return obj.map(&explore) if obj.is_a?(Array)
|
332
|
+
|
327
333
|
obj.instance_variables.map do |s|
|
328
334
|
explore.call(obj.instance_variable_get(s))
|
329
335
|
end
|
@@ -335,12 +341,14 @@ module ELFTools
|
|
335
341
|
stream.pos = 0
|
336
342
|
magic = stream.read(4)
|
337
343
|
raise ELFError, "Invalid magic number #{magic.inspect}" unless magic == Constants::ELFMAG
|
344
|
+
|
338
345
|
ei_class = stream.read(1).ord
|
339
346
|
@elf_class = {
|
340
347
|
1 => 32,
|
341
348
|
2 => 64
|
342
349
|
}[ei_class]
|
343
350
|
raise ELFError, format('Invalid EI_CLASS "\x%02x"', ei_class) if elf_class.nil?
|
351
|
+
|
344
352
|
ei_data = stream.read(1).ord
|
345
353
|
@endian = {
|
346
354
|
1 => :little,
|
data/lib/elftools/lazy_array.rb
CHANGED
data/lib/elftools/note.rb
CHANGED
@@ -41,6 +41,7 @@ module ELFTools
|
|
41
41
|
# Otherwise, return the array of notes.
|
42
42
|
def each_notes
|
43
43
|
return enum_for(:each_notes) unless block_given?
|
44
|
+
|
44
45
|
@notes_offset_map ||= {}
|
45
46
|
cur = note_start
|
46
47
|
notes = []
|
@@ -101,6 +102,7 @@ module ELFTools
|
|
101
102
|
# @return [String] The name.
|
102
103
|
def name
|
103
104
|
return @name if @name
|
105
|
+
|
104
106
|
stream.pos = @offset + SIZE_OF_NHDR
|
105
107
|
@name = stream.read(header.n_namesz)[0..-2]
|
106
108
|
end
|
@@ -108,7 +110,8 @@ module ELFTools
|
|
108
110
|
# Description of this note.
|
109
111
|
# @return [String] The description.
|
110
112
|
def desc
|
111
|
-
return @desc if
|
113
|
+
return @desc if instance_variable_defined?(:@desc)
|
114
|
+
|
112
115
|
stream.pos = @offset + SIZE_OF_NHDR + Util.align(header.n_namesz, 2)
|
113
116
|
@desc = stream.read(header.n_descsz)
|
114
117
|
end
|
data/lib/elftools/structs.rb
CHANGED
data/lib/elftools/util.rb
CHANGED
@@ -17,6 +17,7 @@ module ELFTools
|
|
17
17
|
def align(num, bit)
|
18
18
|
n = 2**bit
|
19
19
|
return num if (num % n).zero?
|
20
|
+
|
20
21
|
(num + n) & ~(n - 1)
|
21
22
|
end
|
22
23
|
|
@@ -36,6 +37,7 @@ module ELFTools
|
|
36
37
|
# if val is an integer, check if exists in mod
|
37
38
|
if val.is_a?(Integer)
|
38
39
|
return val if mod.constants.any? { |c| mod.const_get(c) == val }
|
40
|
+
|
39
41
|
raise ArgumentError, "No constants in #{module_name} is #{val}"
|
40
42
|
end
|
41
43
|
val = val.to_s.upcase
|
@@ -43,6 +45,7 @@ module ELFTools
|
|
43
45
|
val = prefix + '_' + val unless val.start_with?(prefix)
|
44
46
|
val = val.to_sym
|
45
47
|
raise ArgumentError, "No constants in #{module_name} named \"#{val}\"" unless mod.const_defined?(val)
|
48
|
+
|
46
49
|
mod.const_get(val)
|
47
50
|
end
|
48
51
|
|
@@ -61,6 +64,7 @@ module ELFTools
|
|
61
64
|
c = stream.read(1)
|
62
65
|
return nil if c.nil? # reach EOF
|
63
66
|
break if c == "\x00"
|
67
|
+
|
64
68
|
ret += c
|
65
69
|
end
|
66
70
|
ret
|
data/lib/elftools/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: elftools
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- david942j
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2018-10-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bindata
|
@@ -24,20 +24,6 @@ dependencies:
|
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '2'
|
27
|
-
- !ruby/object:Gem::Dependency
|
28
|
-
name: codeclimate-test-reporter
|
29
|
-
requirement: !ruby/object:Gem::Requirement
|
30
|
-
requirements:
|
31
|
-
- - "~>"
|
32
|
-
- !ruby/object:Gem::Version
|
33
|
-
version: '0.6'
|
34
|
-
type: :development
|
35
|
-
prerelease: false
|
36
|
-
version_requirements: !ruby/object:Gem::Requirement
|
37
|
-
requirements:
|
38
|
-
- - "~>"
|
39
|
-
- !ruby/object:Gem::Version
|
40
|
-
version: '0.6'
|
41
27
|
- !ruby/object:Gem::Dependency
|
42
28
|
name: pry
|
43
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -72,42 +58,42 @@ dependencies:
|
|
72
58
|
requirements:
|
73
59
|
- - "~>"
|
74
60
|
- !ruby/object:Gem::Version
|
75
|
-
version: '3.
|
61
|
+
version: '3.7'
|
76
62
|
type: :development
|
77
63
|
prerelease: false
|
78
64
|
version_requirements: !ruby/object:Gem::Requirement
|
79
65
|
requirements:
|
80
66
|
- - "~>"
|
81
67
|
- !ruby/object:Gem::Version
|
82
|
-
version: '3.
|
68
|
+
version: '3.7'
|
83
69
|
- !ruby/object:Gem::Dependency
|
84
70
|
name: rubocop
|
85
71
|
requirement: !ruby/object:Gem::Requirement
|
86
72
|
requirements:
|
87
73
|
- - "~>"
|
88
74
|
- !ruby/object:Gem::Version
|
89
|
-
version: '0.
|
75
|
+
version: '0.59'
|
90
76
|
type: :development
|
91
77
|
prerelease: false
|
92
78
|
version_requirements: !ruby/object:Gem::Requirement
|
93
79
|
requirements:
|
94
80
|
- - "~>"
|
95
81
|
- !ruby/object:Gem::Version
|
96
|
-
version: '0.
|
82
|
+
version: '0.59'
|
97
83
|
- !ruby/object:Gem::Dependency
|
98
84
|
name: simplecov
|
99
85
|
requirement: !ruby/object:Gem::Requirement
|
100
86
|
requirements:
|
101
87
|
- - "~>"
|
102
88
|
- !ruby/object:Gem::Version
|
103
|
-
version: 0.
|
89
|
+
version: 0.16.1
|
104
90
|
type: :development
|
105
91
|
prerelease: false
|
106
92
|
version_requirements: !ruby/object:Gem::Requirement
|
107
93
|
requirements:
|
108
94
|
- - "~>"
|
109
95
|
- !ruby/object:Gem::Version
|
110
|
-
version: 0.
|
96
|
+
version: 0.16.1
|
111
97
|
- !ruby/object:Gem::Dependency
|
112
98
|
name: yard
|
113
99
|
requirement: !ruby/object:Gem::Requirement
|
@@ -175,7 +161,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
175
161
|
version: '0'
|
176
162
|
requirements: []
|
177
163
|
rubyforge_project:
|
178
|
-
rubygems_version: 2.
|
164
|
+
rubygems_version: 2.7.6
|
179
165
|
signing_key:
|
180
166
|
specification_version: 4
|
181
167
|
summary: ELFTools - Pure ruby library for parsing and patching ELF files
|