elftools 1.3.0 → 2.0.0

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.
Files changed (104) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +111 -7
  3. data/lib/elftools/constants/machine.rb +248 -0
  4. data/lib/elftools/constants/machine_names.rb +246 -0
  5. data/lib/elftools/constants/relocation/aarch64.rb +213 -0
  6. data/lib/elftools/constants/relocation/alpha.rb +47 -0
  7. data/lib/elftools/constants/relocation/amdgpu.rb +28 -0
  8. data/lib/elftools/constants/relocation/arm.rb +150 -0
  9. data/lib/elftools/constants/relocation/avr.rb +51 -0
  10. data/lib/elftools/constants/relocation/bfin.rb +72 -0
  11. data/lib/elftools/constants/relocation/bpf.rb +21 -0
  12. data/lib/elftools/constants/relocation/cr16.rb +46 -0
  13. data/lib/elftools/constants/relocation/cris.rb +46 -0
  14. data/lib/elftools/constants/relocation/crx.rb +35 -0
  15. data/lib/elftools/constants/relocation/csky.rb +79 -0
  16. data/lib/elftools/constants/relocation/d10v.rb +23 -0
  17. data/lib/elftools/constants/relocation/d30v.rb +27 -0
  18. data/lib/elftools/constants/relocation/dlx.rb +24 -0
  19. data/lib/elftools/constants/relocation/epiphany.rb +28 -0
  20. data/lib/elftools/constants/relocation/fr30.rb +27 -0
  21. data/lib/elftools/constants/relocation/frv.rb +57 -0
  22. data/lib/elftools/constants/relocation/ft32.rb +27 -0
  23. data/lib/elftools/constants/relocation/h8.rb +69 -0
  24. data/lib/elftools/constants/relocation/hppa.rb +135 -0
  25. data/lib/elftools/constants/relocation/i370.rb +26 -0
  26. data/lib/elftools/constants/relocation/i386.rb +59 -0
  27. data/lib/elftools/constants/relocation/i860.rb +48 -0
  28. data/lib/elftools/constants/relocation/i960.rb +22 -0
  29. data/lib/elftools/constants/relocation/ia64.rb +117 -0
  30. data/lib/elftools/constants/relocation/ip2k.rb +29 -0
  31. data/lib/elftools/constants/relocation/iq2000.rb +27 -0
  32. data/lib/elftools/constants/relocation/kvx.rb +97 -0
  33. data/lib/elftools/constants/relocation/lm32.rb +32 -0
  34. data/lib/elftools/constants/relocation/loongarch.rb +144 -0
  35. data/lib/elftools/constants/relocation/m32c.rb +27 -0
  36. data/lib/elftools/constants/relocation/m32r.rb +57 -0
  37. data/lib/elftools/constants/relocation/m68hc11.rb +35 -0
  38. data/lib/elftools/constants/relocation/m68k.rb +57 -0
  39. data/lib/elftools/constants/relocation/mcore.rb +27 -0
  40. data/lib/elftools/constants/relocation/mep.rb +36 -0
  41. data/lib/elftools/constants/relocation/metag.rb +63 -0
  42. data/lib/elftools/constants/relocation/microblaze.rb +48 -0
  43. data/lib/elftools/constants/relocation/mips.rb +125 -0
  44. data/lib/elftools/constants/relocation/mmix.rb +51 -0
  45. data/lib/elftools/constants/relocation/mn10200.rb +22 -0
  46. data/lib/elftools/constants/relocation/mn10300.rb +49 -0
  47. data/lib/elftools/constants/relocation/moxie.rb +17 -0
  48. data/lib/elftools/constants/relocation/msp430.rb +27 -0
  49. data/lib/elftools/constants/relocation/msp430x.rb +37 -0
  50. data/lib/elftools/constants/relocation/mt.rb +21 -0
  51. data/lib/elftools/constants/relocation/nds32.rb +167 -0
  52. data/lib/elftools/constants/relocation/nfp.rb +41 -0
  53. data/lib/elftools/constants/relocation/nfp3200.rb +46 -0
  54. data/lib/elftools/constants/relocation/nios2.rb +74 -0
  55. data/lib/elftools/constants/relocation/or1k.rb +69 -0
  56. data/lib/elftools/constants/relocation/pj.rb +24 -0
  57. data/lib/elftools/constants/relocation/ppc.rb +131 -0
  58. data/lib/elftools/constants/relocation/ppc64.rb +177 -0
  59. data/lib/elftools/constants/relocation/pru.rb +31 -0
  60. data/lib/elftools/constants/relocation/riscv.rb +74 -0
  61. data/lib/elftools/constants/relocation/rl78.rb +70 -0
  62. data/lib/elftools/constants/relocation/rx.rb +81 -0
  63. data/lib/elftools/constants/relocation/s12z.rb +22 -0
  64. data/lib/elftools/constants/relocation/s390.rb +82 -0
  65. data/lib/elftools/constants/relocation/score.rb +36 -0
  66. data/lib/elftools/constants/relocation/sh.rb +124 -0
  67. data/lib/elftools/constants/relocation/sparc.rb +108 -0
  68. data/lib/elftools/constants/relocation/spu.rb +32 -0
  69. data/lib/elftools/constants/relocation/tic6x.rb +48 -0
  70. data/lib/elftools/constants/relocation/tilegx.rb +134 -0
  71. data/lib/elftools/constants/relocation/tilepro.rb +105 -0
  72. data/lib/elftools/constants/relocation/v800.rb +101 -0
  73. data/lib/elftools/constants/relocation/v850.rb +66 -0
  74. data/lib/elftools/constants/relocation/vax.rb +29 -0
  75. data/lib/elftools/constants/relocation/visium.rb +30 -0
  76. data/lib/elftools/constants/relocation/wasm32.rb +16 -0
  77. data/lib/elftools/constants/relocation/x86_64.rb +68 -0
  78. data/lib/elftools/constants/relocation/xgate.rb +34 -0
  79. data/lib/elftools/constants/relocation/xstormy16.rb +29 -0
  80. data/lib/elftools/constants/relocation/xtensa.rb +75 -0
  81. data/lib/elftools/constants/relocation/z80.rb +28 -0
  82. data/lib/elftools/constants/relocation.rb +181 -0
  83. data/lib/elftools/constants.rb +124 -231
  84. data/lib/elftools/dynamic/hash_table.rb +216 -0
  85. data/lib/elftools/dynamic/string_table.rb +30 -0
  86. data/lib/elftools/dynamic/symbols.rb +146 -0
  87. data/lib/elftools/dynamic/tag.rb +66 -0
  88. data/lib/elftools/dynamic.rb +102 -62
  89. data/lib/elftools/elf_file.rb +74 -23
  90. data/lib/elftools/lazy_array.rb +42 -4
  91. data/lib/elftools/note.rb +6 -3
  92. data/lib/elftools/relocation.rb +94 -0
  93. data/lib/elftools/sections/dynamic_section.rb +13 -0
  94. data/lib/elftools/sections/relocation_section.rb +24 -43
  95. data/lib/elftools/sections/section.rb +4 -4
  96. data/lib/elftools/sections/sym_tab_section.rb +14 -34
  97. data/lib/elftools/sections/symbol.rb +112 -0
  98. data/lib/elftools/segments/dynamic_segment.rb +1 -0
  99. data/lib/elftools/segments/load_segment.rb +33 -5
  100. data/lib/elftools/segments/segment.rb +8 -4
  101. data/lib/elftools/structs.rb +24 -3
  102. data/lib/elftools/util.rb +1 -1
  103. data/lib/elftools/version.rb +1 -1
  104. metadata +101 -11
@@ -0,0 +1,112 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'elftools/constants'
4
+
5
+ module ELFTools
6
+ module Sections
7
+ # Class of symbol.
8
+ class Symbol
9
+ attr_reader :header # @return [ELFTools::Structs::ELF32_sym, ELFTools::Structs::ELF64_sym] Section header.
10
+ attr_reader :stream # @return [#pos=, #read] Streaming object.
11
+
12
+ # Instantiate a {ELFTools::Sections::Symbol} object.
13
+ # @param [ELFTools::Structs::ELF32_sym, ELFTools::Structs::ELF64_sym] header
14
+ # The symbol header.
15
+ # @param [#pos=, #read] stream The streaming object.
16
+ # @param [ELFTools::Sections::StrTabSection, Proc] symstr
17
+ # The symbol string section.
18
+ # If +Proc+ is given, it will be called at the first time
19
+ # access {Symbol#name}.
20
+ # @param [Integer] machine
21
+ # The machine of the ELF file, which a name of a value depends on.
22
+ def initialize(header, stream, symstr: nil, machine: nil)
23
+ @header = header
24
+ @stream = stream
25
+ @symstr = symstr
26
+ @machine = machine
27
+ end
28
+
29
+ # Return the symbol name.
30
+ # @return [String] The name.
31
+ def name
32
+ @name ||= @symstr.call.name_at(header.st_name)
33
+ end
34
+
35
+ # What kind of entity this symbol refers to.
36
+ #
37
+ # The available types are listed in {ELFTools::Constants::STT}.
38
+ # @return [Integer] The type.
39
+ # @example
40
+ # symbol.type == ELFTools::Constants::STT_FUNC
41
+ # #=> true
42
+ def type
43
+ header.st_info & 0xf
44
+ end
45
+
46
+ # The name of {#type}.
47
+ #
48
+ # A machine names types of its own, so the name is only known when the
49
+ # machine of the file is.
50
+ # @return [String] The name.
51
+ # @example
52
+ # symbol.type_name
53
+ # #=> 'STT_FUNC'
54
+ def type_name
55
+ Constants::STT.mapping(@machine, type)
56
+ end
57
+
58
+ # How this symbol is linked against others with the same name.
59
+ #
60
+ # The available bindings are listed in {ELFTools::Constants::STB}.
61
+ # @return [Integer] The binding.
62
+ # @example
63
+ # symbol.bind == ELFTools::Constants::STB_GLOBAL
64
+ # #=> true
65
+ def bind
66
+ header.st_info >> 4
67
+ end
68
+
69
+ # The name of {#bind}.
70
+ # @return [String] The name.
71
+ # @example
72
+ # symbol.bind_name
73
+ # #=> 'STB_GLOBAL'
74
+ def bind_name
75
+ Constants::STB.mapping(@machine, bind)
76
+ end
77
+
78
+ # How this symbol is accessed once it becomes part of an executable or
79
+ # shared object.
80
+ #
81
+ # The available visibilities are listed in {ELFTools::Constants::STV}.
82
+ # @return [Integer] The visibility.
83
+ # @example
84
+ # symbol.visibility == ELFTools::Constants::STV_HIDDEN
85
+ # #=> true
86
+ def visibility
87
+ header.st_other & 0x3
88
+ end
89
+
90
+ # The name of {#visibility}.
91
+ # @return [String] The name.
92
+ # @example
93
+ # symbol.visibility_name
94
+ # #=> 'STV_DEFAULT'
95
+ def visibility_name
96
+ Constants::STV.mapping(@machine, visibility)
97
+ end
98
+
99
+ # The index of the section this symbol is defined in.
100
+ #
101
+ # Values in {ELFTools::Constants::SHN} have special meanings instead of
102
+ # being an index.
103
+ # @return [Integer] The section index.
104
+ # @example
105
+ # symbol.section_index == ELFTools::Constants::SHN_UNDEF
106
+ # #=> true # the symbol is undefined and to be resolved at runtime
107
+ def section_index
108
+ header.st_shndx.to_i
109
+ end
110
+ end
111
+ end
112
+ end
@@ -10,6 +10,7 @@ module ELFTools
10
10
  # This class knows how to get the list of dynamic tags.
11
11
  class DynamicSegment < Segment
12
12
  include Dynamic # rock!
13
+
13
14
  # Get the start address of tags.
14
15
  # @return [Integer] Start address of tags.
15
16
  def tag_start
@@ -49,6 +49,29 @@ module ELFTools
49
49
  mem_head + mem_size
50
50
  end
51
51
 
52
+ # Returns the lowest virtual address backed by this segment's file content.
53
+ #
54
+ # A segment is mapped from an aligned boundary, so the addresses preceding
55
+ # {#mem_head} within the same alignment unit are backed by this segment as
56
+ # well. The bound is clamped to the address of the first byte of the file,
57
+ # so that a malformed ELF, whose +p_offset+ and +p_vaddr+ are not congruent
58
+ # modulo +p_align+, cannot be converted into a negative file offset.
59
+ # @return [Integer]
60
+ # The vma.
61
+ def mapped_head
62
+ [header.p_vaddr.to_i & -header.p_align.to_i, mem_head - file_head].max
63
+ end
64
+
65
+ # Returns the end virtual address backed by this segment's file content.
66
+ #
67
+ # Addresses in between this and {#mem_tail} occupy memory but have no
68
+ # content in file, therefore cannot be converted into a file offset.
69
+ # @return [Integer]
70
+ # The vma.
71
+ def mapped_tail
72
+ mem_head + size
73
+ end
74
+
52
75
  # Query if the given file offset located in this segment.
53
76
  # @param [Integer] offset
54
77
  # File offset.
@@ -56,27 +79,32 @@ module ELFTools
56
79
  # Size.
57
80
  # @return [Boolean]
58
81
  def offset_in?(offset, size = 0)
59
- file_head <= offset && offset + size < file_tail
82
+ file_head <= offset && offset + size <= file_tail
60
83
  end
61
84
 
62
85
  # Convert file offset into virtual memory address.
86
+ #
87
+ # The conversion is a shift by a constant, so it holds no matter +p_offset+
88
+ # is aligned with +p_vaddr+ or not.
63
89
  # @param [Integer] offset
64
90
  # File offset.
65
91
  # @return [Integer]
66
92
  def offset_to_vma(offset)
67
- # XXX: What if file_head is not aligned with p_vaddr (which is invalid according to ELF spec)?
68
93
  offset - file_head + header.p_vaddr
69
94
  end
70
95
 
71
- # Query if the given virtual memory address located in this segment.
96
+ # Query if the given virtual memory address is backed by this segment's
97
+ # file content.
98
+ #
99
+ # Only addresses in between {#mapped_head} and {#mapped_tail} can be
100
+ # converted into a file offset, see {#vma_to_offset}.
72
101
  # @param [Integer] vma
73
102
  # Virtual memory address.
74
103
  # @param [Integer] size
75
104
  # Size.
76
105
  # @return [Boolean]
77
106
  def vma_in?(vma, size = 0)
78
- vma >= (header.p_vaddr & -header.p_align) &&
79
- vma + size <= mem_tail
107
+ vma >= mapped_head && vma + size <= mapped_tail
80
108
  end
81
109
 
82
110
  # Convert virtual memory address into file offset.
@@ -14,10 +14,14 @@ module ELFTools
14
14
  # Streaming object.
15
15
  # @param [Method] offset_from_vma
16
16
  # The method to get offset of file, given virtual memory address.
17
- def initialize(header, stream, offset_from_vma: nil)
17
+ # @param [Integer] machine
18
+ # The machine of the ELF file, which decides what the entries a
19
+ # segment points at mean. This should be +e_machine+ of the ELF header.
20
+ def initialize(header, stream, offset_from_vma: nil, machine: nil, **_kwargs)
18
21
  @header = header
19
22
  @stream = stream
20
23
  @offset_from_vma = offset_from_vma
24
+ @machine = machine
21
25
  end
22
26
 
23
27
  # Return +header.p_type+ in a simpler way.
@@ -37,19 +41,19 @@ module ELFTools
37
41
  # Is this segment readable?
38
42
  # @return [Boolean] True or false.
39
43
  def readable?
40
- (header.p_flags & 4) == 4
44
+ header.p_flags.allbits?(4)
41
45
  end
42
46
 
43
47
  # Is this segment writable?
44
48
  # @return [Boolean] True or false.
45
49
  def writable?
46
- (header.p_flags & 2) == 2
50
+ header.p_flags.allbits?(2)
47
51
  end
48
52
 
49
53
  # Is this segment executable?
50
54
  # @return [Boolean] True or false.
51
55
  def executable?
52
- (header.p_flags & 1) == 1
56
+ header.p_flags.allbits?(1)
53
57
  end
54
58
  end
55
59
  end
@@ -31,15 +31,20 @@ module ELFTools
31
31
  # Hooks the constructor.
32
32
  #
33
33
  # +BinData::Record+ doesn't allow us to override +#initialize+, so we hack +new+ here.
34
+ #
35
+ # Keyword arguments have to be taken as a trailing +Hash+ instead of +**kwargs+: bindata
36
+ # defines +new+ on each record class taking +*args+ only, then re-dispatches it to the
37
+ # endian-specific subclass this method actually runs on, which collapses the caller's
38
+ # keywords into a positional +Hash+ on the way. See +override_new_in_class+ in
39
+ # https://github.com/dmendel/bindata/blob/master/lib/bindata/dsl.rb, which is the same in
40
+ # 2.5.1, 3.0.0, and master.
34
41
  def new(*args)
35
- # XXX: The better implementation is +new(*args, **kwargs)+, but we can't do this unless bindata changed
36
- # lib/bindata/dsl.rb#override_new_in_class to invoke +new+ with both +args+ and +kwargs+.
37
42
  kwargs = args.last.is_a?(Hash) ? args.last : {}
38
43
  offset = kwargs.delete(:offset)
39
44
  super.tap do |obj|
40
45
  obj.offset = offset
41
46
  obj.field_names.each do |f|
42
- m = "#{f}=".to_sym
47
+ m = :"#{f}="
43
48
  old_method = obj.singleton_method(m)
44
49
  obj.singleton_class.send(:undef_method, m)
45
50
  obj.define_singleton_method(m) do |val|
@@ -179,6 +184,22 @@ module ELFTools
179
184
  64 => ELF64_sym
180
185
  }.freeze
181
186
 
187
+ # Header of the symbol hash table +DT_HASH+ points at.
188
+ class ELF_Hash < ELFStruct
189
+ endian :big_and_little
190
+ uint32 :nbucket # Number of buckets
191
+ uint32 :nchain # Number of chains, which is how many symbols there are
192
+ end
193
+
194
+ # Header of the symbol hash table +DT_GNU_HASH+ points at.
195
+ class ELF_GnuHash < ELFStruct
196
+ endian :big_and_little
197
+ uint32 :nbuckets # Number of buckets
198
+ uint32 :symndx # The first symbol index the table indexes
199
+ uint32 :maskwords # Number of words the bloom filter takes
200
+ uint32 :shift2 # The second shift the bloom filter is built with
201
+ end
202
+
182
203
  # Note header.
183
204
  class ELF_Nhdr < ELFStruct
184
205
  endian :big_and_little
data/lib/elftools/util.rb CHANGED
@@ -52,7 +52,7 @@ module ELFTools
52
52
  end
53
53
 
54
54
  # Read from stream until reach a null-byte.
55
- # @param [#pos=, #read] stream Streaming object
55
+ # @param [#pos=, #read] stream Streaming object.
56
56
  # @param [Integer] offset Start from here.
57
57
  # @return [String] Result string will never contain null byte.
58
58
  # @example
@@ -2,5 +2,5 @@
2
2
 
3
3
  module ELFTools
4
4
  # Current gem version
5
- VERSION = '1.3.0'
5
+ VERSION = '2.0.0'
6
6
  end
metadata CHANGED
@@ -1,29 +1,34 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: elftools
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.0
4
+ version: 2.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - david942j
8
- autorequire:
9
8
  bindir: bin
10
9
  cert_chain: []
11
- date: 2024-02-17 00:00:00.000000000 Z
10
+ date: 1980-01-02 00:00:00.000000000 Z
12
11
  dependencies:
13
12
  - !ruby/object:Gem::Dependency
14
13
  name: bindata
15
14
  requirement: !ruby/object:Gem::Requirement
16
15
  requirements:
17
- - - "~>"
16
+ - - ">="
18
17
  - !ruby/object:Gem::Version
19
18
  version: '2'
19
+ - - "<"
20
+ - !ruby/object:Gem::Version
21
+ version: '4'
20
22
  type: :runtime
21
23
  prerelease: false
22
24
  version_requirements: !ruby/object:Gem::Requirement
23
25
  requirements:
24
- - - "~>"
26
+ - - ">="
25
27
  - !ruby/object:Gem::Version
26
28
  version: '2'
29
+ - - "<"
30
+ - !ruby/object:Gem::Version
31
+ version: '4'
27
32
  - !ruby/object:Gem::Dependency
28
33
  name: os
29
34
  requirement: !ruby/object:Gem::Requirement
@@ -100,14 +105,14 @@ dependencies:
100
105
  requirements:
101
106
  - - "~>"
102
107
  - !ruby/object:Gem::Version
103
- version: '0.21'
108
+ version: '1.0'
104
109
  type: :development
105
110
  prerelease: false
106
111
  version_requirements: !ruby/object:Gem::Requirement
107
112
  requirements:
108
113
  - - "~>"
109
114
  - !ruby/object:Gem::Version
110
- version: '0.21'
115
+ version: '1.0'
111
116
  - !ruby/object:Gem::Dependency
112
117
  name: yard
113
118
  requirement: !ruby/object:Gem::Requirement
@@ -134,11 +139,96 @@ files:
134
139
  - README.md
135
140
  - lib/elftools.rb
136
141
  - lib/elftools/constants.rb
142
+ - lib/elftools/constants/machine.rb
143
+ - lib/elftools/constants/machine_names.rb
144
+ - lib/elftools/constants/relocation.rb
145
+ - lib/elftools/constants/relocation/aarch64.rb
146
+ - lib/elftools/constants/relocation/alpha.rb
147
+ - lib/elftools/constants/relocation/amdgpu.rb
148
+ - lib/elftools/constants/relocation/arm.rb
149
+ - lib/elftools/constants/relocation/avr.rb
150
+ - lib/elftools/constants/relocation/bfin.rb
151
+ - lib/elftools/constants/relocation/bpf.rb
152
+ - lib/elftools/constants/relocation/cr16.rb
153
+ - lib/elftools/constants/relocation/cris.rb
154
+ - lib/elftools/constants/relocation/crx.rb
155
+ - lib/elftools/constants/relocation/csky.rb
156
+ - lib/elftools/constants/relocation/d10v.rb
157
+ - lib/elftools/constants/relocation/d30v.rb
158
+ - lib/elftools/constants/relocation/dlx.rb
159
+ - lib/elftools/constants/relocation/epiphany.rb
160
+ - lib/elftools/constants/relocation/fr30.rb
161
+ - lib/elftools/constants/relocation/frv.rb
162
+ - lib/elftools/constants/relocation/ft32.rb
163
+ - lib/elftools/constants/relocation/h8.rb
164
+ - lib/elftools/constants/relocation/hppa.rb
165
+ - lib/elftools/constants/relocation/i370.rb
166
+ - lib/elftools/constants/relocation/i386.rb
167
+ - lib/elftools/constants/relocation/i860.rb
168
+ - lib/elftools/constants/relocation/i960.rb
169
+ - lib/elftools/constants/relocation/ia64.rb
170
+ - lib/elftools/constants/relocation/ip2k.rb
171
+ - lib/elftools/constants/relocation/iq2000.rb
172
+ - lib/elftools/constants/relocation/kvx.rb
173
+ - lib/elftools/constants/relocation/lm32.rb
174
+ - lib/elftools/constants/relocation/loongarch.rb
175
+ - lib/elftools/constants/relocation/m32c.rb
176
+ - lib/elftools/constants/relocation/m32r.rb
177
+ - lib/elftools/constants/relocation/m68hc11.rb
178
+ - lib/elftools/constants/relocation/m68k.rb
179
+ - lib/elftools/constants/relocation/mcore.rb
180
+ - lib/elftools/constants/relocation/mep.rb
181
+ - lib/elftools/constants/relocation/metag.rb
182
+ - lib/elftools/constants/relocation/microblaze.rb
183
+ - lib/elftools/constants/relocation/mips.rb
184
+ - lib/elftools/constants/relocation/mmix.rb
185
+ - lib/elftools/constants/relocation/mn10200.rb
186
+ - lib/elftools/constants/relocation/mn10300.rb
187
+ - lib/elftools/constants/relocation/moxie.rb
188
+ - lib/elftools/constants/relocation/msp430.rb
189
+ - lib/elftools/constants/relocation/msp430x.rb
190
+ - lib/elftools/constants/relocation/mt.rb
191
+ - lib/elftools/constants/relocation/nds32.rb
192
+ - lib/elftools/constants/relocation/nfp.rb
193
+ - lib/elftools/constants/relocation/nfp3200.rb
194
+ - lib/elftools/constants/relocation/nios2.rb
195
+ - lib/elftools/constants/relocation/or1k.rb
196
+ - lib/elftools/constants/relocation/pj.rb
197
+ - lib/elftools/constants/relocation/ppc.rb
198
+ - lib/elftools/constants/relocation/ppc64.rb
199
+ - lib/elftools/constants/relocation/pru.rb
200
+ - lib/elftools/constants/relocation/riscv.rb
201
+ - lib/elftools/constants/relocation/rl78.rb
202
+ - lib/elftools/constants/relocation/rx.rb
203
+ - lib/elftools/constants/relocation/s12z.rb
204
+ - lib/elftools/constants/relocation/s390.rb
205
+ - lib/elftools/constants/relocation/score.rb
206
+ - lib/elftools/constants/relocation/sh.rb
207
+ - lib/elftools/constants/relocation/sparc.rb
208
+ - lib/elftools/constants/relocation/spu.rb
209
+ - lib/elftools/constants/relocation/tic6x.rb
210
+ - lib/elftools/constants/relocation/tilegx.rb
211
+ - lib/elftools/constants/relocation/tilepro.rb
212
+ - lib/elftools/constants/relocation/v800.rb
213
+ - lib/elftools/constants/relocation/v850.rb
214
+ - lib/elftools/constants/relocation/vax.rb
215
+ - lib/elftools/constants/relocation/visium.rb
216
+ - lib/elftools/constants/relocation/wasm32.rb
217
+ - lib/elftools/constants/relocation/x86_64.rb
218
+ - lib/elftools/constants/relocation/xgate.rb
219
+ - lib/elftools/constants/relocation/xstormy16.rb
220
+ - lib/elftools/constants/relocation/xtensa.rb
221
+ - lib/elftools/constants/relocation/z80.rb
137
222
  - lib/elftools/dynamic.rb
223
+ - lib/elftools/dynamic/hash_table.rb
224
+ - lib/elftools/dynamic/string_table.rb
225
+ - lib/elftools/dynamic/symbols.rb
226
+ - lib/elftools/dynamic/tag.rb
138
227
  - lib/elftools/elf_file.rb
139
228
  - lib/elftools/exceptions.rb
140
229
  - lib/elftools/lazy_array.rb
141
230
  - lib/elftools/note.rb
231
+ - lib/elftools/relocation.rb
142
232
  - lib/elftools/sections/dynamic_section.rb
143
233
  - lib/elftools/sections/note_section.rb
144
234
  - lib/elftools/sections/null_section.rb
@@ -147,6 +237,7 @@ files:
147
237
  - lib/elftools/sections/sections.rb
148
238
  - lib/elftools/sections/str_tab_section.rb
149
239
  - lib/elftools/sections/sym_tab_section.rb
240
+ - lib/elftools/sections/symbol.rb
150
241
  - lib/elftools/segments/dynamic_segment.rb
151
242
  - lib/elftools/segments/interp_segment.rb
152
243
  - lib/elftools/segments/load_segment.rb
@@ -161,7 +252,7 @@ licenses:
161
252
  - MIT
162
253
  metadata:
163
254
  rubygems_mfa_required: 'true'
164
- post_install_message:
255
+ changelog_uri: https://github.com/david942j/rbelftools/blob/v2.0.0/CHANGELOG.md
165
256
  rdoc_options: []
166
257
  require_paths:
167
258
  - lib
@@ -169,15 +260,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
169
260
  requirements:
170
261
  - - ">="
171
262
  - !ruby/object:Gem::Version
172
- version: '3.1'
263
+ version: '3.3'
173
264
  required_rubygems_version: !ruby/object:Gem::Requirement
174
265
  requirements:
175
266
  - - ">="
176
267
  - !ruby/object:Gem::Version
177
268
  version: '0'
178
269
  requirements: []
179
- rubygems_version: 3.5.3
180
- signing_key:
270
+ rubygems_version: 3.6.9
181
271
  specification_version: 4
182
272
  summary: ELFTools - Pure ruby library for parsing and patching ELF files
183
273
  test_files: []