elftools 1.1.0 → 1.1.1

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