elftools 1.0.1 → 1.0.2
Sign up to get free protection for your applications and to get access to all the features.
- 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
|