nxo 0.1.1 → 0.2.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9a6087a34de5b6afc2d3d58c644867fd4d85c6388d4f6b99d9094b136b31ce68
4
- data.tar.gz: 93abe32def100c3ee878e954c552082b41d1b9372953f0e078ef4dbe8babecc6
3
+ metadata.gz: dcf6c697473365ce41ca1d78966111fce726254dc0f6bee12631bbe29481c5a5
4
+ data.tar.gz: 7cd24aeda5c6d033b112d707d6f805f585bad3b210bac5609041ebc1b2d4c356
5
5
  SHA512:
6
- metadata.gz: 859ec6728176fa15d299a2c8bea90d594ffcbf8f17f7a3e26f1c317a993832dad2edda5895011ca550d0582bf1c9a9ac33ae23d43b68c722c01517d77dc3c06e
7
- data.tar.gz: 65e5df2c678d6d8f62a601c0ec828516656817291721e6215ecb4a22bb7d00f6b68520695d409f745131c7425fc9925ca9703518138df58768e652d8e4af27fe
6
+ metadata.gz: 82f5a4c905cec030aff73924b6a8032fc023e32e99d4b692916e8d7ee36ad079f8b5c6709ab49018c98d88b7d587e9eb040d343f9bc6f52ebcdcc261fb2947a3
7
+ data.tar.gz: 2992deed99bdb517d6d5c2066da322e3e8ebe2a6e5a291402d6f9d746b428293237db49294a4a9442f1ec042733541e9de747a6ce1e40d8664aa8d876335dc63
data/Gemfile.lock CHANGED
@@ -1,37 +1,38 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- nxo (0.1.1)
4
+ nxo (0.2.0)
5
5
  lz4-ruby
6
6
 
7
7
  GEM
8
8
  remote: https://rubygems.org/
9
9
  specs:
10
- diff-lcs (1.3)
10
+ diff-lcs (1.6.2)
11
11
  lz4-ruby (0.3.3)
12
- rake (10.5.0)
13
- rspec (3.8.0)
14
- rspec-core (~> 3.8.0)
15
- rspec-expectations (~> 3.8.0)
16
- rspec-mocks (~> 3.8.0)
17
- rspec-core (3.8.0)
18
- rspec-support (~> 3.8.0)
19
- rspec-expectations (3.8.2)
12
+ rake (13.3.0)
13
+ rspec (3.13.1)
14
+ rspec-core (~> 3.13.0)
15
+ rspec-expectations (~> 3.13.0)
16
+ rspec-mocks (~> 3.13.0)
17
+ rspec-core (3.13.4)
18
+ rspec-support (~> 3.13.0)
19
+ rspec-expectations (3.13.5)
20
20
  diff-lcs (>= 1.2.0, < 2.0)
21
- rspec-support (~> 3.8.0)
22
- rspec-mocks (3.8.0)
21
+ rspec-support (~> 3.13.0)
22
+ rspec-mocks (3.13.5)
23
23
  diff-lcs (>= 1.2.0, < 2.0)
24
- rspec-support (~> 3.8.0)
25
- rspec-support (3.8.0)
24
+ rspec-support (~> 3.13.0)
25
+ rspec-support (3.13.4)
26
26
 
27
27
  PLATFORMS
28
28
  ruby
29
+ x86_64-linux
29
30
 
30
31
  DEPENDENCIES
31
- bundler (~> 1.16)
32
+ bundler (~> 2.6)
32
33
  nxo!
33
- rake (~> 10.0)
34
- rspec (~> 3.0)
34
+ rake (~> 13.3)
35
+ rspec (~> 3.13)
35
36
 
36
37
  BUNDLED WITH
37
- 1.16.2
38
+ 2.6.7
data/lib/nxo/dynamic.rb CHANGED
@@ -68,6 +68,14 @@ module Nxo
68
68
  end
69
69
  end
70
70
 
71
+ attr_reader :entries
72
+
73
+ def contains?(tag)
74
+ return @entries.any? do |entry|
75
+ entry.tag == tag
76
+ end
77
+ end
78
+
71
79
  def [](tag)
72
80
  return @entries.find do |entry|
73
81
  entry.tag == tag
@@ -78,6 +86,35 @@ module Nxo
78
86
  return @nxo[self[DT::HASH].value + 4, 4].unpack("L<")[0]
79
87
  end
80
88
 
89
+ def gnu_hash_num_symbols
90
+ # https://flapenguin.me/elf-dt-gnu-hash
91
+ nbuckets, symoffset, bloom_size, bloom_shift = @nxo[self[DT::GNU_HASH].value, 16].unpack("L<L<L<L<")
92
+ buckets = @nxo[self[DT::GNU_HASH].value + 16 + 8*bloom_size, 4*nbuckets].unpack("L<*")
93
+ chain_offset = self[DT::GNU_HASH].value + 16 + 8*bloom_size + 4*nbuckets
94
+
95
+ # Find the bucket that starts at the highest index
96
+ index = buckets.max
97
+
98
+ if index < symoffset then
99
+ return symoffset
100
+ end
101
+
102
+ # Walk the chain until it ends
103
+ while (@nxo[chain_offset + (index - symoffset)*4, 4].unpack("L<")[0] & 1) == 0 do
104
+ index+= 1
105
+ end
106
+
107
+ index
108
+ end
109
+
110
+ def num_symbols
111
+ if self.contains?(DT::HASH) then
112
+ nchain
113
+ else
114
+ gnu_hash_num_symbols
115
+ end
116
+ end
117
+
81
118
  def string(i)
82
119
  @nxo[self[DT::STRTAB].value + i, 8192].unpack("Z8192")[0]
83
120
  end
@@ -89,6 +126,10 @@ module Nxo
89
126
  name, info, other, shndx, value, size = pack.unpack("L<CCS<Q<Q<")
90
127
  return Symbol.new(string(name), info, other, shndx, value, size)
91
128
  end
129
+
130
+ def symbols
131
+ self.num_symbols.times.map do |i| self.symbol(i) end
132
+ end
92
133
  end
93
134
  end
94
135
  end
data/lib/nxo/nxo.rb CHANGED
@@ -25,7 +25,7 @@ module Nxo
25
25
  end
26
26
 
27
27
  def [](offset, size)
28
- return @contents[offset, size]
28
+ return @contents.byteslice(offset, size)
29
29
  end
30
30
  end
31
31
 
data/lib/nxo/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Nxo
2
- VERSION = "0.1.1"
2
+ VERSION = "0.2.0"
3
3
  end
data/nxo.gemspec CHANGED
@@ -21,7 +21,7 @@ Gem::Specification.new do |spec|
21
21
  spec.require_paths = ["lib"]
22
22
 
23
23
  spec.add_dependency "lz4-ruby"
24
- spec.add_development_dependency "bundler", "~> 1.16"
25
- spec.add_development_dependency "rake", "~> 10.0"
26
- spec.add_development_dependency "rspec", "~> 3.0"
24
+ spec.add_development_dependency "bundler", "~> 2.6"
25
+ spec.add_development_dependency "rake", "~> 13.3"
26
+ spec.add_development_dependency "rspec", "~> 3.13"
27
27
  end
metadata CHANGED
@@ -1,14 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: nxo
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - misson20000
8
- autorequire:
9
8
  bindir: exe
10
9
  cert_chain: []
11
- date: 2019-03-12 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: lz4-ruby
@@ -30,43 +29,42 @@ dependencies:
30
29
  requirements:
31
30
  - - "~>"
32
31
  - !ruby/object:Gem::Version
33
- version: '1.16'
32
+ version: '2.6'
34
33
  type: :development
35
34
  prerelease: false
36
35
  version_requirements: !ruby/object:Gem::Requirement
37
36
  requirements:
38
37
  - - "~>"
39
38
  - !ruby/object:Gem::Version
40
- version: '1.16'
39
+ version: '2.6'
41
40
  - !ruby/object:Gem::Dependency
42
41
  name: rake
43
42
  requirement: !ruby/object:Gem::Requirement
44
43
  requirements:
45
44
  - - "~>"
46
45
  - !ruby/object:Gem::Version
47
- version: '10.0'
46
+ version: '13.3'
48
47
  type: :development
49
48
  prerelease: false
50
49
  version_requirements: !ruby/object:Gem::Requirement
51
50
  requirements:
52
51
  - - "~>"
53
52
  - !ruby/object:Gem::Version
54
- version: '10.0'
53
+ version: '13.3'
55
54
  - !ruby/object:Gem::Dependency
56
55
  name: rspec
57
56
  requirement: !ruby/object:Gem::Requirement
58
57
  requirements:
59
58
  - - "~>"
60
59
  - !ruby/object:Gem::Version
61
- version: '3.0'
60
+ version: '3.13'
62
61
  type: :development
63
62
  prerelease: false
64
63
  version_requirements: !ruby/object:Gem::Requirement
65
64
  requirements:
66
65
  - - "~>"
67
66
  - !ruby/object:Gem::Version
68
- version: '3.0'
69
- description:
67
+ version: '3.13'
70
68
  email:
71
69
  - xenotoad@xenotoad.net
72
70
  executables:
@@ -94,7 +92,6 @@ files:
94
92
  homepage: https://github.com/misson20000/nxo-rb
95
93
  licenses: []
96
94
  metadata: {}
97
- post_install_message:
98
95
  rdoc_options: []
99
96
  require_paths:
100
97
  - lib
@@ -109,9 +106,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
109
106
  - !ruby/object:Gem::Version
110
107
  version: '0'
111
108
  requirements: []
112
- rubyforge_project:
113
- rubygems_version: 2.7.7
114
- signing_key:
109
+ rubygems_version: 3.6.7
115
110
  specification_version: 4
116
111
  summary: Small gem for working with Nintendo Switch executable objects
117
112
  test_files: []