rbkb 0.7.1 → 0.7.3
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 +5 -13
- data/.gitignore +1 -0
- data/Gemfile.lock +21 -13
- data/bin/b64 +2 -2
- data/bin/bgrep +2 -2
- data/bin/blit +2 -2
- data/bin/c +2 -2
- data/bin/crc32 +2 -2
- data/bin/d64 +2 -2
- data/bin/dedump +2 -2
- data/bin/feed +2 -2
- data/bin/hexify +2 -2
- data/bin/len +2 -2
- data/bin/plugsrv +66 -76
- data/bin/rex +1 -2
- data/bin/rstrings +2 -2
- data/bin/slice +2 -2
- data/bin/telson +2 -2
- data/bin/unhexify +2 -2
- data/bin/urldec +2 -2
- data/bin/urlenc +2 -2
- data/bin/xor +2 -2
- data/lib/rbkb/cli/b64.rb +6 -7
- data/lib/rbkb/cli/bgrep.rb +16 -17
- data/lib/rbkb/cli/blit.rb +29 -31
- data/lib/rbkb/cli/chars.rb +1 -2
- data/lib/rbkb/cli/crc32.rb +8 -10
- data/lib/rbkb/cli/d64.rb +3 -4
- data/lib/rbkb/cli/dedump.rb +15 -18
- data/lib/rbkb/cli/feed.rb +58 -64
- data/lib/rbkb/cli/hexify.rb +15 -16
- data/lib/rbkb/cli/len.rb +19 -27
- data/lib/rbkb/cli/rstrings.rb +41 -44
- data/lib/rbkb/cli/slice.rb +8 -15
- data/lib/rbkb/cli/telson.rb +33 -37
- data/lib/rbkb/cli/unhexify.rb +10 -11
- data/lib/rbkb/cli/urldec.rb +8 -9
- data/lib/rbkb/cli/urlenc.rb +8 -8
- data/lib/rbkb/cli/xor.rb +13 -14
- data/lib/rbkb/cli.rb +52 -65
- data/lib/rbkb/extends/array.rb +7 -8
- data/lib/rbkb/extends/common.rb +3 -5
- data/lib/rbkb/extends/enumerable.rb +21 -3
- data/lib/rbkb/extends/float.rb +1 -2
- data/lib/rbkb/extends/numeric.rb +29 -30
- data/lib/rbkb/extends/object.rb +1 -2
- data/lib/rbkb/extends/string.rb +172 -189
- data/lib/rbkb/extends/symbol.rb +2 -4
- data/lib/rbkb/extends.rb +0 -1
- data/lib/rbkb/plug/blit.rb +66 -69
- data/lib/rbkb/plug/cli.rb +22 -25
- data/lib/rbkb/plug/feed_import.rb +17 -21
- data/lib/rbkb/plug/peer.rb +11 -13
- data/lib/rbkb/plug/plug.rb +83 -91
- data/lib/rbkb/plug/proxy.rb +4 -8
- data/lib/rbkb/plug/unix_domain.rb +12 -14
- data/lib/rbkb/plug.rb +5 -6
- data/lib/rbkb/version.rb +1 -1
- data/lib/rbkb.rb +2 -3
- data/rbkb.gemspec +3 -3
- data/test/disabled_test_cli_blit.rb +1 -2
- data/test/disabled_test_cli_feed.rb +1 -2
- data/test/disabled_test_cli_telson.rb +1 -2
- data/test/test_cli_crc32.rb +1 -1
- data/test/test_cli_dedump.rb +83 -79
- data/test/test_cli_len.rb +25 -24
- data/test/test_cli_slice.rb +22 -22
- data/test/test_cli_xor.rb +4 -4
- metadata +18 -22
checksums.yaml
CHANGED
@@ -1,15 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
|
5
|
-
data.tar.gz: !binary |-
|
6
|
-
YjVlMWViMTgzYTBkNmFhZmRiNzM4ZTQyYTAyMGRlZGIwYTRjNGY2NA==
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: d5474592bbbae9a55abdca06c58359b376691c0b8880d5ff162f83d343c9d6b3
|
4
|
+
data.tar.gz: 93ccb680fcbb0d6401f2b58293e5613752ecb1bc22cd2f228e8ba8c4c8c99256
|
7
5
|
SHA512:
|
8
|
-
metadata.gz:
|
9
|
-
|
10
|
-
ODE3OTQ0MzhlMWY3OGZlYWEwODEwNjU5ZDE1MjFmZjAyZjFhNWVkNjJmMjU0
|
11
|
-
ZTU0OTVmYzM4MjY1MWNiYTZkY2E4MDg5ZDg0ZmRjNDcwNmNlMzE=
|
12
|
-
data.tar.gz: !binary |-
|
13
|
-
NmU3MDE1YjRjNTQxZmMyM2Y2YzZlMzRjNjVmZmViNGJjZTJkZDBjZDI3NTBi
|
14
|
-
YzNjYmExMGVkYzMwNmUxNTYyNzk5MTQ1N2Y1MzVmZTI2OTBhMmU3OWFlNjYy
|
15
|
-
ODFmOTFjZWFjYjFjOWU3MzVkZTRkMjc5OTViMmRiZDdiNzAwZjg=
|
6
|
+
metadata.gz: 12a216f76dae5c38aa9f191c05fa4fd206852e87fcbab5a43062d90367d0ab7d59cc642ca278c2964dbabd72a10f3833c76a53e28a267e1b6f4bdcca40603c47
|
7
|
+
data.tar.gz: 85771881d4b58a041b13f58f72854a17a4eeaf6b8c2589988f792978dd3812b2a2556760f07af20119394f90881ad12f97f003f58389dd9abf1d374f72310486
|
data/.gitignore
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,27 +1,35 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
rbkb (0.7.
|
4
|
+
rbkb (0.7.3)
|
5
5
|
|
6
6
|
GEM
|
7
7
|
remote: https://rubygems.org/
|
8
8
|
specs:
|
9
|
-
diff-lcs (1.2
|
10
|
-
rake (
|
11
|
-
rspec (
|
12
|
-
rspec-core (~>
|
13
|
-
rspec-expectations (~>
|
14
|
-
rspec-mocks (~>
|
15
|
-
rspec-core (
|
16
|
-
|
17
|
-
|
18
|
-
|
9
|
+
diff-lcs (1.6.2)
|
10
|
+
rake (13.3.0)
|
11
|
+
rspec (3.13.1)
|
12
|
+
rspec-core (~> 3.13.0)
|
13
|
+
rspec-expectations (~> 3.13.0)
|
14
|
+
rspec-mocks (~> 3.13.0)
|
15
|
+
rspec-core (3.13.4)
|
16
|
+
rspec-support (~> 3.13.0)
|
17
|
+
rspec-expectations (3.13.5)
|
18
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
19
|
+
rspec-support (~> 3.13.0)
|
20
|
+
rspec-mocks (3.13.5)
|
21
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
22
|
+
rspec-support (~> 3.13.0)
|
23
|
+
rspec-support (3.13.4)
|
19
24
|
|
20
25
|
PLATFORMS
|
21
26
|
ruby
|
22
27
|
|
23
28
|
DEPENDENCIES
|
24
|
-
bundler
|
25
|
-
rake
|
29
|
+
bundler
|
30
|
+
rake (~> 13)
|
26
31
|
rbkb!
|
27
32
|
rspec
|
33
|
+
|
34
|
+
BUNDLED WITH
|
35
|
+
2.6.9
|
data/bin/b64
CHANGED
data/bin/bgrep
CHANGED
data/bin/blit
CHANGED
data/bin/c
CHANGED
data/bin/crc32
CHANGED
data/bin/d64
CHANGED
data/bin/dedump
CHANGED
data/bin/feed
CHANGED
data/bin/hexify
CHANGED
data/bin/len
CHANGED
data/bin/plugsrv
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
-
# Copyright 2009 emonti at matasano.com
|
2
|
+
# Copyright 2009 emonti at matasano.com
|
3
3
|
# See README.rdoc for license information
|
4
4
|
#
|
5
5
|
# A blit-able reverse TCP proxy. Displays traffic hexdumps. Currently uses
|
@@ -18,16 +18,17 @@ require 'rbkb/plug'
|
|
18
18
|
|
19
19
|
class BlitPlug
|
20
20
|
module UI
|
21
|
-
def log(
|
22
|
-
|
23
|
-
|
24
|
-
|
21
|
+
def log(*msg)
|
22
|
+
return if PLUG_OPTS[:quiet]
|
23
|
+
|
24
|
+
PLUG_OPTS[:out].puts msg
|
25
25
|
end
|
26
26
|
module_function :log
|
27
27
|
end
|
28
28
|
|
29
29
|
class Controller
|
30
30
|
attr_accessor :tgtaddr, :tgtport, :tgtclient, :blit, :peers
|
31
|
+
|
31
32
|
@@controller = nil
|
32
33
|
|
33
34
|
def initialize(tgtaddr, tgtport, tgtclient)
|
@@ -37,28 +38,27 @@ class BlitPlug
|
|
37
38
|
|
38
39
|
@@controller = self
|
39
40
|
|
40
|
-
@peers =
|
41
|
+
@peers = []
|
41
42
|
|
42
43
|
## Just tack on a blit server???
|
43
|
-
@blit = EventMachine
|
44
|
+
@blit = EventMachine.start_server(
|
44
45
|
PLUG_OPTS[:blit_addr], PLUG_OPTS[:blit_port], Plug::Blit, :TCP, self
|
45
46
|
)
|
46
|
-
|
47
47
|
end
|
48
48
|
|
49
|
-
|
49
|
+
# #----------------------------------------
|
50
50
|
|
51
|
-
def dispatch_rcv(
|
51
|
+
def dispatch_rcv(_snder, data)
|
52
52
|
data # for now
|
53
53
|
end
|
54
54
|
|
55
|
-
|
55
|
+
# #----------------------------------------
|
56
56
|
|
57
|
-
def dispatch_close(
|
57
|
+
def dispatch_close(_snder)
|
58
58
|
nil # for now
|
59
59
|
end
|
60
60
|
|
61
|
-
|
61
|
+
# #----------------------------------------
|
62
62
|
|
63
63
|
def self.proxy(cli)
|
64
64
|
unless (ctrl = @@controller)
|
@@ -69,7 +69,7 @@ class BlitPlug
|
|
69
69
|
tgtport = ctrl.tgtport
|
70
70
|
tgtclient = ctrl.tgtclient
|
71
71
|
|
72
|
-
srv = EventMachine
|
72
|
+
srv = EventMachine.connect(tgtaddr, tgtport, tgtclient)
|
73
73
|
srv.plug_peers.push cli
|
74
74
|
cli.plug_peers.push srv
|
75
75
|
|
@@ -80,7 +80,6 @@ class BlitPlug
|
|
80
80
|
end
|
81
81
|
end # class BlitPlug::Controller
|
82
82
|
|
83
|
-
|
84
83
|
module BaseTCP
|
85
84
|
include UI
|
86
85
|
|
@@ -88,48 +87,46 @@ class BlitPlug
|
|
88
87
|
attr_reader :sock_peer, :sock_peername
|
89
88
|
|
90
89
|
def post_init
|
91
|
-
@plug_peers =
|
92
|
-
@kind = :conn
|
90
|
+
@plug_peers = []
|
91
|
+
@kind = :conn # default
|
93
92
|
end
|
94
|
-
|
93
|
+
|
95
94
|
def name
|
96
95
|
@name
|
97
96
|
end
|
98
97
|
|
99
98
|
def say(data, sender)
|
100
|
-
log "%#{sender.kind.to_s.upcase}-SAYS", data.hexdump(:
|
101
|
-
send_data data
|
99
|
+
log "%#{sender.kind.to_s.upcase}-SAYS", data.hexdump(out: StringIO.new), '%'
|
100
|
+
send_data data
|
102
101
|
end
|
103
102
|
|
104
|
-
def receive_data
|
105
|
-
log "%#{kind.to_s.upcase}-#{sock_peername}-SAYS", data.hexdump,
|
103
|
+
def receive_data(data)
|
104
|
+
log "%#{kind.to_s.upcase}-#{sock_peername}-SAYS", data.hexdump, '%'
|
106
105
|
if @controller and (data = @controller.dispatch_rcv(self, data)).nil?
|
107
106
|
return
|
108
107
|
end
|
109
|
-
@plug_peers.each {|p| p.send_data data}
|
110
|
-
end
|
111
108
|
|
109
|
+
@plug_peers.each { |p| p.send_data data }
|
110
|
+
end
|
112
111
|
|
113
112
|
def notify_connection
|
114
113
|
@name = "#{kind.to_s.upcase}-#{sock_peername}"
|
115
114
|
log "%#{@name}-CONNECTED"
|
116
115
|
end
|
117
116
|
|
118
|
-
|
119
117
|
def unbind
|
120
118
|
@name = "#{kind.to_s.upcase}-#{sock_peername}"
|
121
119
|
log "%#{@name}-CLOSED"
|
122
120
|
|
123
121
|
cret = (@controller and @controller.dispatch_close(self))
|
124
122
|
|
125
|
-
@plug_peers.each do |p|
|
123
|
+
@plug_peers.each do |p|
|
126
124
|
p.plug_peers.delete(self)
|
127
125
|
p.close_connection unless cret
|
128
126
|
end
|
129
127
|
end
|
130
128
|
end
|
131
129
|
|
132
|
-
|
133
130
|
module TCPListener
|
134
131
|
include BlitPlug::BaseTCP
|
135
132
|
attr_accessor :tgtaddr, :tgtport
|
@@ -146,10 +143,8 @@ class BlitPlug
|
|
146
143
|
|
147
144
|
notify_connection
|
148
145
|
end
|
149
|
-
|
150
146
|
end # module TCPListener
|
151
147
|
|
152
|
-
|
153
148
|
module TCPClient
|
154
149
|
include BlitPlug::BaseTCP
|
155
150
|
attr_accessor :connected
|
@@ -165,25 +160,21 @@ class BlitPlug
|
|
165
160
|
notify_connection
|
166
161
|
start_tls if PLUG_OPTS[:tgt_tls]
|
167
162
|
end
|
168
|
-
|
169
163
|
end # module TCPClient
|
170
|
-
|
171
164
|
end # module BlitPlug
|
172
165
|
|
173
|
-
PLUG_OPTS={
|
174
|
-
:
|
175
|
-
:
|
176
|
-
:
|
177
|
-
:
|
166
|
+
PLUG_OPTS = {
|
167
|
+
quiet: false,
|
168
|
+
out: STDOUT,
|
169
|
+
blit_addr: Plug::Blit::DEFAULT_IPADDR,
|
170
|
+
blit_port: Plug::Blit::DEFAULT_PORT
|
178
171
|
}
|
179
172
|
|
180
173
|
def bail(*msg)
|
181
|
-
|
174
|
+
warn msg
|
182
175
|
exit 1
|
183
176
|
end
|
184
177
|
|
185
|
-
|
186
|
-
|
187
178
|
#############################################################################
|
188
179
|
### MAIN
|
189
180
|
#############################################################################
|
@@ -194,78 +185,77 @@ opts = OptionParser.new do |opts|
|
|
194
185
|
" <target:tport> = the address of the target service\n",
|
195
186
|
" <@laddr:lport> = optional address and port to listen on\n"
|
196
187
|
|
197
|
-
opts.separator
|
198
|
-
opts.separator
|
188
|
+
opts.separator ''
|
189
|
+
opts.separator 'Options:'
|
199
190
|
|
200
|
-
opts.on_tail(
|
191
|
+
opts.on_tail('-h', '--help', 'Show this message') do
|
201
192
|
puts opts
|
202
193
|
exit 1
|
203
194
|
end
|
204
195
|
|
205
|
-
opts.on(
|
206
|
-
PLUG_OPTS[:out] =
|
196
|
+
opts.on('-o', '--output FILE', 'send output to a file') do |o|
|
197
|
+
PLUG_OPTS[:out] = begin
|
198
|
+
File.open(o, 'w')
|
199
|
+
rescue StandardError
|
200
|
+
(bail $!)
|
201
|
+
end
|
207
202
|
end
|
208
203
|
|
209
|
-
opts.on(
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
unless m = /^([\w\.]+)?(?::(\d+))?$/.match(addr)
|
215
|
-
STDERR.puts "invalid listener address"
|
204
|
+
opts.on('-l', '--listen ADDR:PORT',
|
205
|
+
'optional listener address:port',
|
206
|
+
'(default: 0.0.0.0:<tport>)') do |addr|
|
207
|
+
unless m = /^([\w.]+)?(?::(\d+))?$/.match(addr)
|
208
|
+
warn 'invalid listener address'
|
216
209
|
exit 1
|
217
210
|
end
|
218
211
|
PLUG_OPTS[:svraddr] = m[1]
|
219
|
-
PLUG_OPTS[:svrport] =
|
212
|
+
PLUG_OPTS[:svrport] = m[2] ? m[2].to_i : nil
|
220
213
|
end
|
221
214
|
|
222
|
-
opts.on(
|
215
|
+
opts.on('-q', '--[no-]quiet', 'Suppress/Enable conversation dumps.') do |q|
|
223
216
|
PLUG_OPTS[:quiet] = q
|
224
217
|
end
|
225
218
|
|
226
|
-
opts.on(
|
227
|
-
|
228
|
-
"(default: #{PLUG_OPTS[:blit_addr]}:#{PLUG_OPTS[:blit_port]})"
|
229
|
-
|
230
|
-
|
231
|
-
unless m = /^(?:([\w\.]+):)?(\d+)$/.match(addr)
|
232
|
-
STDERR.puts "invalid blit listener argument"
|
219
|
+
opts.on('-b', '--blitsrv ADDR:PORT',
|
220
|
+
'specify blit listener [address:]port',
|
221
|
+
"(default: #{PLUG_OPTS[:blit_addr]}:#{PLUG_OPTS[:blit_port]})") do |addr|
|
222
|
+
unless m = /^(?:([\w.]+):)?(\d+)$/.match(addr)
|
223
|
+
warn 'invalid blit listener argument'
|
233
224
|
exit 1
|
234
225
|
end
|
235
226
|
PLUG_OPTS[:blit_addr] = m[1] if m[1]
|
236
227
|
PLUG_OPTS[:blit_port] = m[2].to_i
|
237
228
|
end
|
238
229
|
|
239
|
-
opts.on(
|
240
|
-
opts.on(
|
241
|
-
|
230
|
+
opts.on('--[no-]target-tls', 'enable/disable TLS to target') { |t| PLUG_OPTS[:tgt_tls] = t }
|
231
|
+
opts.on('--[no-]server-tls', 'enable/disable TLS to clients') { |t| PLUG_OPTS[:svr_tls] = t }
|
242
232
|
end
|
243
233
|
|
244
|
-
|
245
|
-
|
234
|
+
begin
|
235
|
+
opts.parse!(ARGV)
|
236
|
+
rescue StandardError
|
237
|
+
(warn $!
|
238
|
+
exit 1)
|
239
|
+
end
|
246
240
|
|
247
241
|
# Get target/listen argument
|
248
|
-
rx = /^([\w
|
242
|
+
rx = /^([\w.]+):(\d+)(?:@(?:([\w.]+):)?(\d+))?$/
|
249
243
|
unless (m = rx.match(ARGV.shift)) and ARGV.shift.nil?
|
250
|
-
|
244
|
+
warn opts.banner
|
251
245
|
exit 1
|
252
246
|
end
|
253
247
|
|
254
248
|
PLUG_OPTS[:tgtaddr] = m[1]
|
255
249
|
PLUG_OPTS[:tgtport] = m[2].to_i
|
256
|
-
PLUG_OPTS[:svraddr] ||=
|
250
|
+
PLUG_OPTS[:svraddr] ||= m[3] || '0.0.0.0'
|
257
251
|
PLUG_OPTS[:svrport] ||= (m[4] || PLUG_OPTS[:tgtport]).to_i
|
258
252
|
|
259
|
-
|
260
|
-
EventMachine::run {
|
253
|
+
EventMachine.run do
|
261
254
|
# Instantiate controller
|
262
|
-
|
255
|
+
BlitPlug::Controller.new(PLUG_OPTS[:tgtaddr], PLUG_OPTS[:tgtport], BlitPlug::TCPClient)
|
263
256
|
|
264
257
|
# Start event loop
|
265
258
|
BlitPlug::UI.log "%Starting TCP PlugServer #{PLUG_OPTS[:svraddr]}:#{PLUG_OPTS[:svrport]} -> #{PLUG_OPTS[:tgtaddr]}:#{PLUG_OPTS[:tgtport]}"
|
266
259
|
|
267
|
-
|
268
|
-
|
269
|
-
}
|
270
|
-
|
271
|
-
|
260
|
+
EventMachine.start_server(PLUG_OPTS[:svraddr], PLUG_OPTS[:svrport], BlitPlug::TCPListener)
|
261
|
+
end
|
data/bin/rex
CHANGED
data/bin/rstrings
CHANGED
data/bin/slice
CHANGED
data/bin/telson
CHANGED
data/bin/unhexify
CHANGED
data/bin/urldec
CHANGED
data/bin/urlenc
CHANGED
data/bin/xor
CHANGED
data/lib/rbkb/cli/b64.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
require 'rbkb/cli'
|
2
2
|
|
3
|
-
# Copyright 2009 emonti at matasano.com
|
3
|
+
# Copyright 2009 emonti at matasano.com
|
4
4
|
# See README.rdoc for license information
|
5
5
|
#
|
6
6
|
# b64 converts strings or raw data to base-64 encoding.
|
@@ -8,13 +8,13 @@ class Rbkb::Cli::B64 < Rbkb::Cli::Executable
|
|
8
8
|
def make_parser
|
9
9
|
super()
|
10
10
|
arg = @oparse
|
11
|
-
arg.banner +=
|
11
|
+
arg.banner += ' <data | blank for stdin>'
|
12
12
|
|
13
13
|
add_std_file_opt(:indat)
|
14
14
|
|
15
|
-
arg.on(
|
16
|
-
|
17
|
-
|
15
|
+
arg.on('-l', '--length LEN', Numeric, 'Output LEN chars per line') do |l|
|
16
|
+
bail('length must be > 0') unless l > 0
|
17
|
+
@opts[:len] = l
|
18
18
|
end
|
19
19
|
end
|
20
20
|
|
@@ -22,7 +22,7 @@ class Rbkb::Cli::B64 < Rbkb::Cli::Executable
|
|
22
22
|
super(*args)
|
23
23
|
parse_string_argument(:indat)
|
24
24
|
parse_file_argument(:indat)
|
25
|
-
parse_catchall
|
25
|
+
parse_catchall
|
26
26
|
@opts[:indat] ||= @stdin.read
|
27
27
|
end
|
28
28
|
|
@@ -32,4 +32,3 @@ class Rbkb::Cli::B64 < Rbkb::Cli::Executable
|
|
32
32
|
self.exit(0)
|
33
33
|
end
|
34
34
|
end
|
35
|
-
|
data/lib/rbkb/cli/bgrep.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
require 'rbkb/cli'
|
2
2
|
|
3
|
-
# Copyright 2009 emonti at matasano.com
|
3
|
+
# Copyright 2009 emonti at matasano.com
|
4
4
|
# See README.rdoc for license information
|
5
5
|
#
|
6
6
|
# searches for a binary string in input. string can be provided 'hexified'
|
@@ -15,37 +15,36 @@ class Rbkb::Cli::Bgrep < Rbkb::Cli::Executable
|
|
15
15
|
|
16
16
|
def make_parser
|
17
17
|
arg = super()
|
18
|
-
arg.banner +=
|
18
|
+
arg.banner += ' <search> <file | blank for stdin>'
|
19
19
|
|
20
|
-
arg.on(
|
20
|
+
arg.on('-x', '--[no-]hex', 'Search for hex (default: false)') do |x|
|
21
21
|
@opts[:hex] = x
|
22
22
|
end
|
23
23
|
|
24
|
-
arg.on(
|
24
|
+
arg.on('-r', '--[no-]regex', 'Search for regex (default: false)') do |r|
|
25
25
|
@opts[:rx] = r
|
26
26
|
end
|
27
27
|
|
28
|
-
arg.on(
|
29
|
-
|
28
|
+
arg.on('-a', '--align=BYTES', Numeric,
|
29
|
+
'Only match on alignment boundary') do |a|
|
30
30
|
@opts[:align] = a
|
31
31
|
end
|
32
32
|
|
33
|
-
arg.on(
|
33
|
+
arg.on('-n', '--[no-]filename',
|
34
34
|
"Toggle filenames. (Default: #{@opts[:include_fname]})") do |n|
|
35
35
|
@opts[:include_fname] = n
|
36
36
|
end
|
37
|
-
|
37
|
+
arg
|
38
38
|
end
|
39
39
|
|
40
|
-
|
41
40
|
def parse(*args)
|
42
41
|
super(*args)
|
43
42
|
|
44
|
-
bail
|
43
|
+
bail 'need search argument' unless @find = @argv.shift
|
45
44
|
|
46
|
-
|
47
|
-
|
48
|
-
|
45
|
+
return unless @opts[:hex] and @opts[:rx]
|
46
|
+
|
47
|
+
bail '-r and -x are mutually exclusive'
|
49
48
|
|
50
49
|
# ... filenames vs. stdin will be parsed in 'go'
|
51
50
|
end
|
@@ -67,17 +66,17 @@ class Rbkb::Cli::Bgrep < Rbkb::Cli::Executable
|
|
67
66
|
dat = @stdin.read
|
68
67
|
end
|
69
68
|
|
70
|
-
loop do
|
69
|
+
loop do
|
71
70
|
dat.bgrep(@find, @opts[:align]) do |hit_start, hit_end, match|
|
72
71
|
@stdout.write "#{fname}:" if fname and @opts[:include_fname]
|
73
72
|
|
74
|
-
@stdout.write("%0.8x:%0.8x:b:#{match.inspect}\n"
|
73
|
+
@stdout.write(format("%0.8x:%0.8x:b:#{match.inspect}\n", hit_start, hit_end))
|
75
74
|
end
|
76
75
|
|
77
|
-
break unless fname
|
76
|
+
break unless fname = @argv.shift
|
77
|
+
|
78
78
|
dat = do_file_read(fname)
|
79
79
|
end
|
80
80
|
self.exit(0)
|
81
81
|
end
|
82
82
|
end
|
83
|
-
|