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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 19ea6d2a816767e47ee17390784085a33e1fe331
4
- data.tar.gz: f4af2d0e5552c02ee43d4de74afecd077926532d
2
+ SHA256:
3
+ metadata.gz: d224322bce7543153f1df63cc56b4c41c57825527f484fd6ff8893c85e939496
4
+ data.tar.gz: 6ff32495c229e034faabcd026eb47cf05fcdc7d737430075cdb0feb24548ef6b
5
5
  SHA512:
6
- metadata.gz: a368bc9ee554c9ca775d8e2d51b121965d242f64d2b2a838d249a3914d0d91ece6a3469c36519fa9fdd5d1347f2ff291917adf43e39f488509f29faac5348eda
7
- data.tar.gz: 8d777854fc6d4f931452aa0e738202496dd9dd7ce01b22e25da1cf40e1e4839f944cdd95de99e5a88cea85fab2eb611859379b5dc78180a4d0ff42ea835c1f13
6
+ metadata.gz: 46d10fef9a58529af0a3838357f222f009a2b6e466a0a588933eccb182a8df4f785643d2f32909158e14bafb8dce026d3237afe2e5089ffe69a2f1a545a294e7
7
+ data.tar.gz: 6f4e7af4e07511edc99b0ef49cae2617edddb1a19097082674435a87dcbd471ebcff412525e8a862f1cec5206c1034911985863b7e66ba60cd47b650c099c559
@@ -6,49 +6,42 @@ module ELFTools
6
6
  # ELF magic header
7
7
  ELFMAG = "\x7FELF".freeze
8
8
 
9
- # Section header types, records in +sh_type+.
10
- module SHT
11
- SHT_NULL = 0 # null section
12
- SHT_PROGBITS = 1 # information defined by program itself
13
- SHT_SYMTAB = 2 # symbol table section
14
- SHT_STRTAB = 3 # string table section
15
- SHT_RELA = 4 # relocation with addends
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
- # Program header types, records in +p_type+.
33
- module PT
34
- PT_NULL = 0 # null segment
35
- PT_LOAD = 1 # segment to be load
36
- PT_DYNAMIC = 2 # dynamic tags
37
- PT_INTERP = 3 # interpreter, same as .interp section
38
- PT_NOTE = 4 # same as .note* section
39
- PT_SHLIB = 5 # reserved
40
- PT_PHDR = 6 # where program header starts
41
- PT_TLS = 7 # thread local storage segment
42
- PT_LOOS = 0x60000000 # OS-specific
43
- PT_HIOS = 0x6fffffff # OS-specific
44
- # Values between {PT_LOPROC} and {PT_HIPROC} are reserved for processor-specific semantics.
45
- PT_LOPROC = 0x70000000
46
- PT_HIPROC = 0x7fffffff # see {PT_LOPROC}
47
- PT_GNU_EH_FRAME = 0x6474e550 # for exception handler
48
- PT_GNU_STACK = 0x6474e551 # permission of stack
49
- PT_GNU_RELRO = 0x6474e552 # read only after relocation
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 PT
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
@@ -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
@@ -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,
@@ -38,6 +38,7 @@ module ELFTools
38
38
  def [](i)
39
39
  # XXX: support negative index?
40
40
  return nil if i < 0 || i >= @internal.size
41
+
41
42
  @internal[i] ||= @block.call(i)
42
43
  end
43
44
  end
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 @desc
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
@@ -42,6 +42,7 @@ module ELFTools
42
42
  # Otherwise, the whole relocations will be returned.
43
43
  def each_relocations(&block)
44
44
  return enum_for(:each_relocations) unless block_given?
45
+
45
46
  Array.new(num_relocations) do |i|
46
47
  relocation_at(i).tap(&block)
47
48
  end
@@ -56,6 +56,7 @@ module ELFTools
56
56
  # Otherwise return array of symbols.
57
57
  def each_symbols(&block)
58
58
  return enum_for(:each_symbols) unless block_given?
59
+
59
60
  Array.new(num_symbols) do |i|
60
61
  symbol_at(i).tap(&block)
61
62
  end
@@ -54,6 +54,7 @@ module ELFTools
54
54
  # @return [String]
55
55
  def pack(val, bytes)
56
56
  raise ArgumentError, "Not supported assign type #{val.class}" unless val.is_a?(Integer)
57
+
57
58
  number = val & ((1 << (8 * bytes)) - 1)
58
59
  out = []
59
60
  bytes.times do
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
@@ -1,4 +1,4 @@
1
1
  module ELFTools
2
2
  # Current gem version
3
- VERSION = '1.0.1'.freeze
3
+ VERSION = '1.0.2'.freeze
4
4
  end
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.1
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: 2017-10-03 00:00:00.000000000 Z
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.5'
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.5'
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.47'
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.47'
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.13.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.13.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.5.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