elftools 1.1.0 → 1.1.1

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
2
  SHA256:
3
- metadata.gz: 37252d63c99fd7133d5abc0fc0e8c8685d3197840eaad1ddee1ba83b36e5dee7
4
- data.tar.gz: 7c092256e8b730ba2e58d8dc6f5000024cf88ee8229f71727c5194a358d07bf8
3
+ metadata.gz: 604d1720fabed07c8bb37185d09e89ec8962d3a34ad85ec58ffe42a29e02857a
4
+ data.tar.gz: 5912030d8207a6f46ae3cd3c91e0b6a60b7a2d75f57e79bfd46dc01dfdb3c9d3
5
5
  SHA512:
6
- metadata.gz: 03ca86ad044a3ed27c1b635f1ad4170a5906f8f3b41b5162934b16784475a3ce3b731b9734665b72803cb293f6eeb8e90cfc703a5b77adebc0b625842d7b3a95
7
- data.tar.gz: 44a0470006720e81dfc7096b9cbb076120100db888603cd7107091372b3277d2a0f806089812505d86a0f58f44148e477906289cc49689d21d0ec57950ffee1e
6
+ metadata.gz: 01466eb4691e615a65a2efda8914e4c7a4ac17f71b2c437e14b088e4962885fd091e0be981ae81deabdf7aa2425b6e9fff8c0e74434aa09fd489a722d7a81c39
7
+ data.tar.gz: a551049dedca9a3f69cbd1da213b193c8e1f616bf665113d55832b27543bb3e8b02d0f5e9b87ebf64f50d64fb70c15731f8e504e82cc97fb9d6b1251b2cc8d71
data/lib/elftools.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'elftools/constants'
2
4
  require 'elftools/elf_file'
3
5
  require 'elftools/version'
@@ -1,10 +1,12 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module ELFTools
2
4
  # Define constants from elf.h.
3
5
  # Mostly refer from https://github.com/torvalds/linux/blob/master/include/uapi/linux/elf.h
4
6
  # and binutils/elfcpp/elfcpp.h.
5
7
  module Constants
6
8
  # ELF magic header
7
- ELFMAG = "\x7FELF".freeze
9
+ ELFMAG = "\x7FELF"
8
10
 
9
11
  # Values of `d_un.d_val' in the DT_FLAGS and DT_FLAGS_1 entry.
10
12
  module DF
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module ELFTools
2
4
  # Define common methods for dynamic sections and dynamic segments.
3
5
  #
@@ -89,7 +91,7 @@ module ELFTools
89
91
  # @param [Integer] n The index.
90
92
  # @return [ELFTools::Dynamic::Tag] The desired tag.
91
93
  def tag_at(n)
92
- return if n < 0
94
+ return if n.negative?
93
95
 
94
96
  @tag_at_map ||= {}
95
97
  return @tag_at_map[n] if @tag_at_map[n]
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'elftools/constants'
2
4
  require 'elftools/exceptions'
3
5
  require 'elftools/lazy_array'
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module ELFTools
2
4
  # Being raised when parsing error.
3
5
  class ELFError < StandardError; end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module ELFTools
2
4
  # A helper class for {ELFTools} easy to implement
3
5
  # 'lazy loading' objects.
@@ -37,7 +39,7 @@ module ELFTools
37
39
  # return type of block given in {#initialize}.
38
40
  def [](i)
39
41
  # XXX: support negative index?
40
- return nil if i < 0 || i >= @internal.size
42
+ return nil unless i.between?(0, @internal.size - 1)
41
43
 
42
44
  @internal[i] ||= @block.call(i)
43
45
  end
data/lib/elftools/note.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'elftools/structs'
2
4
  require 'elftools/util'
3
5
 
@@ -101,7 +103,7 @@ module ELFTools
101
103
  # Name of this note.
102
104
  # @return [String] The name.
103
105
  def name
104
- return @name if @name
106
+ return @name if defined?(@name)
105
107
 
106
108
  stream.pos = @offset + SIZE_OF_NHDR
107
109
  @name = stream.read(header.n_namesz)[0..-2]
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'elftools/dynamic'
2
4
  require 'elftools/sections/section'
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'elftools/note'
2
4
  require 'elftools/sections/section'
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'elftools/sections/section'
2
4
 
3
5
  module ELFTools
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'elftools/constants'
2
4
  require 'elftools/sections/section'
3
5
  require 'elftools/structs'
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'elftools/constants'
2
4
  module ELFTools
3
5
  module Sections
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # Require this file to load all sections classes.
2
4
 
3
5
  require 'elftools/sections/section'
@@ -19,7 +21,7 @@ module ELFTools
19
21
  # @param [#pos=, #read] stream Streaming object.
20
22
  # @return [ELFTools::Sections::Section]
21
23
  # Return object dependes on +header.sh_type+.
22
- def create(header, stream, *args)
24
+ def create(header, stream, *args, **kwargs)
23
25
  klass = case header.sh_type
24
26
  when Constants::SHT_DYNAMIC then DynamicSection
25
27
  when Constants::SHT_NULL then NullSection
@@ -29,7 +31,7 @@ module ELFTools
29
31
  when Constants::SHT_SYMTAB, Constants::SHT_DYNSYM then SymTabSection
30
32
  else Section
31
33
  end
32
- klass.new(header, stream, *args)
34
+ klass.new(header, stream, *args, **kwargs)
33
35
  end
34
36
  end
35
37
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'elftools/sections/section'
2
4
  require 'elftools/util'
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'elftools/sections/section'
2
4
 
3
5
  module ELFTools
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'elftools/segments/segment'
2
4
  require 'elftools/dynamic'
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'elftools/segments/segment'
2
4
 
3
5
  module ELFTools
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'elftools/segments/segment'
2
4
 
3
5
  module ELFTools
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'elftools/note'
2
4
  require 'elftools/segments/segment'
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module ELFTools
2
4
  module Segments
3
5
  # Base class of segments.
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # Require this file to load all segment classes.
2
4
 
3
5
  require 'elftools/segments/segment'
@@ -17,7 +19,7 @@ module ELFTools
17
19
  # @param [#pos=, #read] stream Streaming object.
18
20
  # @return [ELFTools::Segments::Segment]
19
21
  # Return object dependes on +header.p_type+.
20
- def create(header, stream, *args)
22
+ def create(header, stream, *args, **kwargs)
21
23
  klass = case header.p_type
22
24
  when Constants::PT_DYNAMIC then DynamicSegment
23
25
  when Constants::PT_INTERP then InterpSegment
@@ -25,7 +27,7 @@ module ELFTools
25
27
  when Constants::PT_NOTE then NoteSegment
26
28
  else Segment
27
29
  end
28
- klass.new(header, stream, *args)
30
+ klass.new(header, stream, *args, **kwargs)
29
31
  end
30
32
  end
31
33
  end
@@ -1,10 +1,12 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'bindata'
4
+
2
5
  module ELFTools
3
6
  # Define ELF related structures in this module.
4
7
  #
5
8
  # Structures are fetched from https://github.com/torvalds/linux/blob/master/include/uapi/linux/elf.h.
6
- # Using the bindata gem to make these structures support 32/64 bits and
7
- # little/big endian simultaneously.
9
+ # Use gem +bindata+ to have these structures support 32/64 bits and little/big endian simultaneously.
8
10
  module Structs
9
11
  # The base structure to define common methods.
10
12
  class ELFStruct < BinData::Record
@@ -23,9 +25,13 @@ module ELFTools
23
25
  end
24
26
 
25
27
  class << self
26
- # Hook constructor, while +BinData::Record+ doesn't allow us to override +#initialize+,
27
- # so we hack +new+ here.
28
- def new(**kwargs)
28
+ # Hooks the constructor.
29
+ #
30
+ # +BinData::Record+ doesn't allow us to override +#initialize+, so we hack +new+ here.
31
+ def new(*args)
32
+ # XXX: The better implementation is +new(*args, **kwargs)+, but we can't do this unless bindata changed
33
+ # lib/bindata/dsl.rb#override_new_in_class to invoke +new+ with both +args+ and +kwargs+.
34
+ kwargs = args.last.is_a?(Hash) ? args.last : {}
29
35
  offset = kwargs.delete(:offset)
30
36
  super.tap do |obj|
31
37
  obj.offset = offset
@@ -42,13 +48,13 @@ module ELFTools
42
48
  end
43
49
  end
44
50
 
45
- # Hacking to get endian of current class
46
- # @return [Symbol, nil] +:little+ or +:big+.
51
+ # Gets the endianness of current class.
52
+ # @return [:little, :big] The endianness.
47
53
  def self_endian
48
54
  bindata_name[-2..-1] == 'be' ? :big : :little
49
55
  end
50
56
 
51
- # Pack integer into string.
57
+ # Packs an integer to string.
52
58
  # @param [Integer] val
53
59
  # @param [Integer] bytes
54
60
  # @return [String]
@@ -110,7 +116,7 @@ module ELFTools
110
116
  choice :sh_entsize, **CHOICE_SIZE_T
111
117
  end
112
118
 
113
- # Program header structure for 32bit.
119
+ # Program header structure for 32-bit.
114
120
  class ELF32_Phdr < ELFStruct
115
121
  endian :big_and_little
116
122
  uint32 :p_type
@@ -123,7 +129,7 @@ module ELFTools
123
129
  uint32 :p_align
124
130
  end
125
131
 
126
- # Program header structure for 64bit.
132
+ # Program header structure for 64-bit.
127
133
  class ELF64_Phdr < ELFStruct
128
134
  endian :big_and_little
129
135
  uint32 :p_type
@@ -135,13 +141,14 @@ module ELFTools
135
141
  uint64 :p_memsz
136
142
  uint64 :p_align
137
143
  end
138
- # Get program header class according to bits.
144
+
145
+ # Gets the class of program header according to bits.
139
146
  ELF_Phdr = {
140
147
  32 => ELF32_Phdr,
141
148
  64 => ELF64_Phdr
142
149
  }.freeze
143
150
 
144
- # Symbol structure for 32bit.
151
+ # Symbol structure for 32-bit.
145
152
  class ELF32_sym < ELFStruct
146
153
  endian :big_and_little
147
154
  uint32 :st_name
@@ -152,7 +159,7 @@ module ELFTools
152
159
  uint16 :st_shndx
153
160
  end
154
161
 
155
- # Symbol structure for 64bit.
162
+ # Symbol structure for 64-bit.
156
163
  class ELF64_sym < ELFStruct
157
164
  endian :big_and_little
158
165
  uint32 :st_name # Symbol name, index in string tbl
@@ -162,6 +169,7 @@ module ELFTools
162
169
  uint64 :st_value # Value of the symbol
163
170
  uint64 :st_size # Associated symbol size
164
171
  end
172
+
165
173
  # Get symbol header class according to bits.
166
174
  ELF_sym = {
167
175
  32 => ELF32_sym,
data/lib/elftools/util.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module ELFTools
2
4
  # Define some util methods.
3
5
  module Util
@@ -1,4 +1,6 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module ELFTools
2
4
  # Current gem version
3
- VERSION = '1.1.0'.freeze
5
+ VERSION = '1.1.1'
4
6
  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.1.0
4
+ version: 1.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - david942j
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-01-07 00:00:00.000000000 Z
11
+ date: 2019-10-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bindata
@@ -44,14 +44,14 @@ dependencies:
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '12.1'
47
+ version: '13.0'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: '12.1'
54
+ version: '13.0'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: rspec
57
57
  requirement: !ruby/object:Gem::Requirement
@@ -86,14 +86,14 @@ dependencies:
86
86
  requirements:
87
87
  - - "~>"
88
88
  - !ruby/object:Gem::Version
89
- version: 0.16.1
89
+ version: '0.17'
90
90
  type: :development
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
94
  - - "~>"
95
95
  - !ruby/object:Gem::Version
96
- version: 0.16.1
96
+ version: '0.17'
97
97
  - !ruby/object:Gem::Dependency
98
98
  name: yard
99
99
  requirement: !ruby/object:Gem::Requirement
@@ -154,15 +154,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
154
154
  requirements:
155
155
  - - ">="
156
156
  - !ruby/object:Gem::Version
157
- version: 2.1.0
157
+ version: '2.3'
158
158
  required_rubygems_version: !ruby/object:Gem::Requirement
159
159
  requirements:
160
160
  - - ">="
161
161
  - !ruby/object:Gem::Version
162
162
  version: '0'
163
163
  requirements: []
164
- rubyforge_project:
165
- rubygems_version: 2.7.6
164
+ rubygems_version: 3.0.2
166
165
  signing_key:
167
166
  specification_version: 4
168
167
  summary: ELFTools - Pure ruby library for parsing and patching ELF files