this is why you always commit your code
This commit is contained in:
parent
2f46c5cf59
commit
65655ddedd
66
revolabs-flx_uc_1000/readbin.rb
Executable file
66
revolabs-flx_uc_1000/readbin.rb
Executable file
@ -0,0 +1,66 @@
|
|||||||
|
#!/usr/bin/env ruby
|
||||||
|
## readbin.rb - given offsets, read binary files out of a packed file
|
||||||
|
|
||||||
|
file = ARGV.pop || 'FLX-UC-1500-2-6-0-294.bundle'
|
||||||
|
outdir = ARGV.last || sprintf('rb-out_%s.%s', file, Time.now.to_i)
|
||||||
|
files = Hash.new
|
||||||
|
|
||||||
|
offset_map = {
|
||||||
|
'FLX-UC-1500-2-6-0-294.bundle' => [ 0, 138364, 266272, 283460, 1708064, 19642065, File.size('FLX-UC-1500-2-6-0-294.bundle') ]
|
||||||
|
}
|
||||||
|
|
||||||
|
unless File.file?(file)
|
||||||
|
puts sprintf('unable to read[%s]', file)
|
||||||
|
exit 1
|
||||||
|
end
|
||||||
|
|
||||||
|
unless File.directory?(outdir)
|
||||||
|
puts sprintf('creating[%s]', outdir)
|
||||||
|
Dir.mkdir(outdir)
|
||||||
|
end
|
||||||
|
|
||||||
|
#offsets = [ 0, 138364, 266272, 283460, 1708064, 19642065, File.size(file) ]
|
||||||
|
|
||||||
|
offsets = offset_map[file]
|
||||||
|
|
||||||
|
# read in the file in segments, stuff in a hash
|
||||||
|
open(file, 'rb') do |f|
|
||||||
|
offsets.each_with_index do |offset, i|
|
||||||
|
forward = offsets[i+1]
|
||||||
|
backward = offsets[i-1]
|
||||||
|
|
||||||
|
break if forward.nil? # we're at the end of the file
|
||||||
|
|
||||||
|
length = (offset - forward).abs
|
||||||
|
|
||||||
|
puts sprintf('offset[%s] at[%s] reading[%s]..', i, offsets[i], length)
|
||||||
|
|
||||||
|
f.seek(offset)
|
||||||
|
s = f.read(length)
|
||||||
|
|
||||||
|
files[offset] = {
|
||||||
|
:i => i,
|
||||||
|
:contents => s,
|
||||||
|
}
|
||||||
|
|
||||||
|
puts sprintf(' got[%s]', s.size)
|
||||||
|
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
# write out each of the files
|
||||||
|
files.each_pair do |offset, hash|
|
||||||
|
|
||||||
|
hex = sprintf('0x%s', sprintf('%x', offset).upcase)
|
||||||
|
name = sprintf('%s/%s.%s.out', outdir, hash[:i], hex)
|
||||||
|
|
||||||
|
puts sprintf('writing[%s]', name)
|
||||||
|
|
||||||
|
open(name, 'wb') do |f|
|
||||||
|
f.write(hash[:contents])
|
||||||
|
end
|
||||||
|
|
||||||
|
puts sprintf(' size[%s]', File.size?(name))
|
||||||
|
|
||||||
|
end
|
||||||
|
|
Loading…
Reference in New Issue
Block a user