elftools 1.3.1 → 2.1.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 (112) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +193 -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 +168 -231
  84. data/lib/elftools/dynamic/hash_table.rb +232 -0
  85. data/lib/elftools/dynamic/string_table.rb +30 -0
  86. data/lib/elftools/dynamic/symbols.rb +174 -0
  87. data/lib/elftools/dynamic/tag.rb +66 -0
  88. data/lib/elftools/dynamic/versions.rb +87 -0
  89. data/lib/elftools/dynamic.rb +119 -62
  90. data/lib/elftools/elf_file.rb +74 -22
  91. data/lib/elftools/lazy_array.rb +42 -4
  92. data/lib/elftools/note.rb +6 -3
  93. data/lib/elftools/relative_relocations.rb +88 -0
  94. data/lib/elftools/relocation.rb +144 -0
  95. data/lib/elftools/sections/dynamic_section.rb +13 -0
  96. data/lib/elftools/sections/relative_relocation_section.rb +46 -0
  97. data/lib/elftools/sections/relocation_section.rb +24 -43
  98. data/lib/elftools/sections/section.rb +35 -4
  99. data/lib/elftools/sections/sections.rb +8 -0
  100. data/lib/elftools/sections/sym_tab_section.rb +47 -35
  101. data/lib/elftools/sections/symbol.rb +202 -0
  102. data/lib/elftools/sections/version_definition_section.rb +40 -0
  103. data/lib/elftools/sections/version_need_section.rb +40 -0
  104. data/lib/elftools/sections/version_section.rb +44 -0
  105. data/lib/elftools/segments/dynamic_segment.rb +1 -0
  106. data/lib/elftools/segments/load_segment.rb +33 -5
  107. data/lib/elftools/segments/segment.rb +8 -4
  108. data/lib/elftools/structs.rb +132 -18
  109. data/lib/elftools/util.rb +69 -12
  110. data/lib/elftools/version.rb +1 -1
  111. data/lib/elftools/version_tables.rb +155 -0
  112. metadata +108 -11
data/lib/elftools/util.rb CHANGED
@@ -3,6 +3,11 @@
3
3
  module ELFTools
4
4
  # Define some util methods.
5
5
  module Util
6
+ # How many bytes {ClassMethods#cstring} takes from a stream at a time. Long
7
+ # enough that a name is usually read in one, short enough that reading one
8
+ # never reaches far past its end.
9
+ CSTRING_CHUNK = 64
10
+
6
11
  # Class methods.
7
12
  module ClassMethods
8
13
  # Round up the number to be multiple of
@@ -23,6 +28,26 @@ module ELFTools
23
28
  (num + n) & ~(n - 1)
24
29
  end
25
30
 
31
+ # Checks a value is one the bits recording it can hold.
32
+ #
33
+ # Several of the values a file records share a byte with others, so a
34
+ # value too large for its bits would be written over its neighbours
35
+ # instead of being rejected.
36
+ # @param [Integer] value The value.
37
+ # @param [Integer] bits How many bits record it.
38
+ # @param [String] name What the value is, for the error to name.
39
+ # @return [Integer] The value.
40
+ # @raise [ArgumentError] If the bits cannot hold it.
41
+ # @example
42
+ # Util.fits!(16, 4, 'Symbol binding')
43
+ # #=> ArgumentError: Symbol binding must be in 0..15, got 16
44
+ def fits!(value, bits, name)
45
+ highest = (1 << bits) - 1
46
+ return value if value.is_a?(Integer) && value.between?(0, highest)
47
+
48
+ raise ArgumentError, format('%s must be in 0..%d, got %p', name, highest, value)
49
+ end
50
+
26
51
  # Fetch the correct value from module +mod+.
27
52
  #
28
53
  # See {ELFTools::ELFFile#segment_by_type} for how to
@@ -38,21 +63,23 @@ module ELFTools
38
63
  module_name = mod.name.sub('ELFTools::', '')
39
64
  # if val is an integer, check if exists in mod
40
65
  if val.is_a?(Integer)
41
- return val if mod.constants.any? { |c| mod.const_get(c) == val }
66
+ return val if values_of(mod).key?(val)
42
67
 
43
68
  raise ArgumentError, "No constants in #{module_name} is #{val}"
44
69
  end
45
70
  val = val.to_s.upcase
46
71
  prefix = module_name.split('::')[-1]
47
72
  val = "#{prefix}_#{val}" unless val.start_with?(prefix)
48
- val = val.to_sym
49
- raise ArgumentError, "No constants in #{module_name} named \"#{val}\"" unless mod.const_defined?(val)
73
+ value = constants_of(mod)[val]
74
+ raise ArgumentError, "No constants in #{module_name} named \"#{val}\"" if value.nil?
50
75
 
51
- mod.const_get(val)
76
+ value
52
77
  end
53
78
 
54
79
  # Read from stream until reach a null-byte.
55
- # @param [#pos=, #read] stream Streaming object
80
+ #
81
+ # The stream is left just past the null-byte.
82
+ # @param [#pos=, #read] stream Streaming object.
56
83
  # @param [Integer] offset Start from here.
57
84
  # @return [String] Result string will never contain null byte.
58
85
  # @example
@@ -60,16 +87,19 @@ module ELFTools
60
87
  # #=> "\x7FELF\x02\x01\x01"
61
88
  def cstring(stream, offset)
62
89
  stream.pos = offset
63
- # read until "\x00"
64
- ret = ''
90
+ ret = +''
65
91
  loop do
66
- c = stream.read(1)
67
- return nil if c.nil? # reach EOF
68
- break if c == "\x00"
92
+ chunk = stream.read(CSTRING_CHUNK)
93
+ return nil if chunk.nil? # reach EOF
94
+
95
+ stop = chunk.index("\x00")
96
+ if stop
97
+ stream.pos = offset + ret.bytesize + stop + 1
98
+ return ret << chunk.byteslice(0, stop)
99
+ end
69
100
 
70
- ret += c
101
+ ret << chunk
71
102
  end
72
- ret
73
103
  end
74
104
 
75
105
  # Select objects from enumerator with +.type+ property
@@ -93,6 +123,33 @@ module ELFTools
93
123
  end
94
124
  end
95
125
  end
126
+
127
+ private
128
+
129
+ # What a module names each of its constants, and what each is worth.
130
+ #
131
+ # Names are compared upcased, which is how a constant keeping the case
132
+ # the ABI wrote it in, +SHT_GNU_verneed+ for one, is found by the name it
133
+ # is asked for. Read once per module, because reading them is more work
134
+ # than the lookup it is for.
135
+ # @param [Module] mod The module.
136
+ # @return [Hash{String => Integer}] The constants, by their upcased name.
137
+ def constants_of(mod)
138
+ (@constants_of ||= {})[mod] ||= mod.constants.each_with_object({}) do |constant, table|
139
+ # A constant still waiting to be autoloaded is left alone, so that
140
+ # asking after one never loads what nothing has asked for.
141
+ next if mod.autoload?(constant)
142
+
143
+ table[constant.to_s.upcase] ||= mod.const_get(constant)
144
+ end
145
+ end
146
+
147
+ # Which values a module names a constant for.
148
+ # @param [Module] mod The module.
149
+ # @return [Hash{Integer => Boolean}] The values, as the keys.
150
+ def values_of(mod)
151
+ (@values_of ||= {})[mod] ||= constants_of(mod).values.to_h { |value| [value, true] }
152
+ end
96
153
  end
97
154
  extend ClassMethods
98
155
  end
@@ -2,5 +2,5 @@
2
2
 
3
3
  module ELFTools
4
4
  # Current gem version
5
- VERSION = '1.3.1'
5
+ VERSION = '2.1.0'
6
6
  end
@@ -0,0 +1,155 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'elftools/constants'
4
+ require 'elftools/structs'
5
+
6
+ module ELFTools
7
+ # The two tables a file records its versions in.
8
+ #
9
+ # One holds the versions the file needs of the files it is loaded with, the
10
+ # other the versions it defines for what it exports, and a symbol names one
11
+ # of either by the same index. Both are chains, each entry saying how far
12
+ # off the next one is, and both are recorded twice over: the tags point at
13
+ # them, and so do sections.
14
+ class VersionTables
15
+ # The name each index of either table names.
16
+ # @param [Array<ELFTools::VersionTables::Requirement>] requirements The requirements.
17
+ # @param [Array<ELFTools::VersionTables::Definition>] definitions The definitions.
18
+ # @return [Hash{Integer => String}] The names.
19
+ def self.names(requirements, definitions)
20
+ (requirements.flat_map(&:versions) + definitions).to_h { |version| [version.index, version.name] }
21
+ end
22
+
23
+ # The version a symbol records, read against the names of the tables.
24
+ # @param [Integer, nil] recorded
25
+ # What the symbol records, which is an index with the highest bit marking
26
+ # a version asked for by name rather than the default one.
27
+ # @param [Hash{Integer => String}] names What {names} answered.
28
+ # @return [ELFTools::VersionTables::Version, nil]
29
+ # The version, +nil+ where the symbol names none: a symbol of the file
30
+ # itself, a symbol of no version at all, and a name nothing records.
31
+ def self.version(recorded, names)
32
+ return if recorded.nil?
33
+
34
+ index = recorded & ~Constants::VER_NDX_HIDDEN
35
+ return if index <= Constants::VER_NDX_GLOBAL
36
+
37
+ name = names[index]
38
+ Version.new(name, index, hidden: !(recorded & Constants::VER_NDX_HIDDEN).zero?) if name
39
+ end
40
+
41
+ # Instantiate a {ELFTools::VersionTables} object.
42
+ # @param [#pos=, #read] stream Streaming object.
43
+ # @param [#name_at] strtab The table the names are recorded in.
44
+ # @param [Symbol] endian +:little+ or +:big+.
45
+ def initialize(stream, strtab, endian:)
46
+ @stream = stream
47
+ @strtab = strtab
48
+ @endian = endian
49
+ end
50
+
51
+ # Reads the versions a file needs of the files it is loaded with.
52
+ # @param [Integer] at The file offset the table starts at.
53
+ # @param [Integer] count How many entries it has.
54
+ # @return [Array<ELFTools::VersionTables::Requirement>] The requirements.
55
+ def requirements(at, count)
56
+ chain(at, count, Structs::ELF_Verneed, :vn_next) do |need, from|
57
+ versions = chain(from + need.vn_aux.to_i, need.vn_cnt.to_i, Structs::ELF_Vernaux, :vna_next) do |aux, _|
58
+ Version.new(@strtab.name_at(aux.vna_name.to_i), aux.vna_other.to_i)
59
+ end
60
+ Requirement.new(@strtab.name_at(need.vn_file.to_i), versions)
61
+ end
62
+ end
63
+
64
+ # Reads the versions a file defines for what it exports.
65
+ # @param [Integer] at The file offset the table starts at.
66
+ # @param [Integer] count How many entries it has.
67
+ # @return [Array<ELFTools::VersionTables::Definition>] The definitions.
68
+ def definitions(at, count)
69
+ chain(at, count, Structs::ELF_Verdef, :vd_next) do |defn, from|
70
+ names = chain(from + defn.vd_aux.to_i, defn.vd_cnt.to_i, Structs::ELF_Verdaux, :vda_next) do |aux, _|
71
+ @strtab.name_at(aux.vda_name.to_i)
72
+ end
73
+ # The first name is the version's own, the rest are what it descends from.
74
+ Definition.new(names.first, defn.vd_ndx.to_i, names.drop(1),
75
+ base: !(defn.vd_flags.to_i & Constants::VER_FLG_BASE).zero?)
76
+ end
77
+ end
78
+
79
+ private
80
+
81
+ # Reads a chain of entries, each saying how far off the one after it is.
82
+ # @return [Array] What the block makes of each entry.
83
+ def chain(at, count, klass, following)
84
+ Array.new(count) do
85
+ entry = klass.new(endian: @endian, offset: at)
86
+ @stream.pos = at
87
+ entry.read(@stream)
88
+ yield(entry, at).tap { at += entry.send(following).to_i }
89
+ end
90
+ end
91
+
92
+ # A version a file needs or defines.
93
+ class Version
94
+ attr_reader :name # @return [String] The name, +GLIBC_2.2.5+ for instance.
95
+ attr_reader :index # @return [Integer] The index the symbols name it with.
96
+
97
+ # Instantiate a {ELFTools::VersionTables::Version} object.
98
+ # @param [String] name The name.
99
+ # @param [Integer] index The index.
100
+ # @param [Boolean] hidden Whether a symbol binds to it as a version that is not the default.
101
+ def initialize(name, index, hidden: false)
102
+ @name = name
103
+ @index = index
104
+ @hidden = hidden
105
+ end
106
+
107
+ # Whether the symbol binding to this version binds to something other
108
+ # than the default, which is what more than one version of a name means.
109
+ # @return [Boolean] The answer.
110
+ def hidden?
111
+ @hidden
112
+ end
113
+ end
114
+
115
+ # The versions a file needs of one of the files it is loaded with.
116
+ class Requirement
117
+ attr_reader :file # @return [String] The name of the file, +libc.so.6+ for instance.
118
+ attr_reader :versions # @return [Array<ELFTools::VersionTables::Version>] The versions needed of it.
119
+
120
+ # Instantiate a {ELFTools::VersionTables::Requirement} object.
121
+ # @param [String] file The name of the file.
122
+ # @param [Array<ELFTools::VersionTables::Version>] versions The versions.
123
+ def initialize(file, versions)
124
+ @file = file
125
+ @versions = versions
126
+ end
127
+ end
128
+
129
+ # A version a file defines for what it exports.
130
+ class Definition
131
+ attr_reader :name # @return [String] The name.
132
+ attr_reader :index # @return [Integer] The index the symbols name it with.
133
+ attr_reader :parents # @return [Array<String>] The names of the versions it descends from.
134
+
135
+ # Instantiate a {ELFTools::VersionTables::Definition} object.
136
+ # @param [String] name The name.
137
+ # @param [Integer] index The index.
138
+ # @param [Array<String>] parents The names it descends from.
139
+ # @param [Boolean] base Whether it names the file rather than a version of it.
140
+ def initialize(name, index, parents, base: false)
141
+ @name = name
142
+ @index = index
143
+ @parents = parents
144
+ @base = base
145
+ end
146
+
147
+ # Whether this names the file itself rather than a version of it, which
148
+ # the first definition of a file does.
149
+ # @return [Boolean] The answer.
150
+ def base?
151
+ @base
152
+ end
153
+ end
154
+ end
155
+ 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.1
4
+ version: 2.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - david942j
8
- autorequire:
9
8
  bindir: bin
10
9
  cert_chain: []
11
- date: 2024-04-22 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,19 +139,111 @@ 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
227
+ - lib/elftools/dynamic/versions.rb
138
228
  - lib/elftools/elf_file.rb
139
229
  - lib/elftools/exceptions.rb
140
230
  - lib/elftools/lazy_array.rb
141
231
  - lib/elftools/note.rb
232
+ - lib/elftools/relative_relocations.rb
233
+ - lib/elftools/relocation.rb
142
234
  - lib/elftools/sections/dynamic_section.rb
143
235
  - lib/elftools/sections/note_section.rb
144
236
  - lib/elftools/sections/null_section.rb
237
+ - lib/elftools/sections/relative_relocation_section.rb
145
238
  - lib/elftools/sections/relocation_section.rb
146
239
  - lib/elftools/sections/section.rb
147
240
  - lib/elftools/sections/sections.rb
148
241
  - lib/elftools/sections/str_tab_section.rb
149
242
  - lib/elftools/sections/sym_tab_section.rb
243
+ - lib/elftools/sections/symbol.rb
244
+ - lib/elftools/sections/version_definition_section.rb
245
+ - lib/elftools/sections/version_need_section.rb
246
+ - lib/elftools/sections/version_section.rb
150
247
  - lib/elftools/segments/dynamic_segment.rb
151
248
  - lib/elftools/segments/interp_segment.rb
152
249
  - lib/elftools/segments/load_segment.rb
@@ -156,12 +253,13 @@ files:
156
253
  - lib/elftools/structs.rb
157
254
  - lib/elftools/util.rb
158
255
  - lib/elftools/version.rb
256
+ - lib/elftools/version_tables.rb
159
257
  homepage: https://github.com/david942j/rbelftools
160
258
  licenses:
161
259
  - MIT
162
260
  metadata:
163
261
  rubygems_mfa_required: 'true'
164
- post_install_message:
262
+ changelog_uri: https://github.com/david942j/rbelftools/blob/v2.1.0/CHANGELOG.md
165
263
  rdoc_options: []
166
264
  require_paths:
167
265
  - lib
@@ -169,15 +267,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
169
267
  requirements:
170
268
  - - ">="
171
269
  - !ruby/object:Gem::Version
172
- version: '3.1'
270
+ version: '3.3'
173
271
  required_rubygems_version: !ruby/object:Gem::Requirement
174
272
  requirements:
175
273
  - - ">="
176
274
  - !ruby/object:Gem::Version
177
275
  version: '0'
178
276
  requirements: []
179
- rubygems_version: 3.5.3
180
- signing_key:
277
+ rubygems_version: 3.6.9
181
278
  specification_version: 4
182
279
  summary: ELFTools - Pure ruby library for parsing and patching ELF files
183
280
  test_files: []