1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81
|
#!/usr/bin/python
#
# simply binary dump
#
import sys
import array
if len(sys.argv) < 4:
print "bindump.py file offset count"
sys.exit(1)
else:
try:
_fname = file(sys.argv[1])
except:
print "invalid file: " + sys.argv[1]
sys.exit(1)
try:
_offset = int(sys.argv[2])
except:
print "invalid offset: " + sys.argv[2]
sys.exit(1)
if _offset < 0:
print "invalid offset: %d" % _offset
sys.exit(1)
try:
_count = int(sys.argv[3])
except:
print "invalid byte count: " + sys.argv[3]
sys.exit(1)
if _count < 0:
print "invalid byte count: %d" % _count
sys.exit(1)
print "opening file: " + _fname.name
print "offset: %d" % _offset
print "count: %d" % _count
try:
_fname.seek(_offset, 0)
except:
_fname.close()
print "invalid offset into file: %d" % _offset
sys.exit(1)
_data = array.array('B')
try:
_data.fromfile(_fname, _count)
except:
_fname.close()
print "invalid read of %d bytes from file: %s" % (_count, _fname.name)
sys.exit(1)
_fname.close()
_patterns = [
'0 0 0 0', # 0
'0 0 0 1', # 1
'0 0 1 0', # 2
'0 0 1 1', # 3
'0 1 0 0', # 4
'0 1 0 1', # 5
'0 1 1 0', # 6
'0 1 1 1', # 7
'1 0 0 0', # 8
'1 0 0 1', # 9
'1 0 1 0', # A
'1 0 1 1', # B
'1 1 0 0', # C
'1 1 0 1', # D
'1 1 1 0', # E
'1 1 1 1' # F
]
_i = 0
while (_i < _count):
_bitoffset = _i * 8
_nib1 = _patterns[((_data[_i] & 0xf0) >> 4)]
_nib2 = _patterns[(_data[_i] & 0x0f)]
print "%d [%d]: 0x%02x %s %s" % (_i, _bitoffset, _data[_i], _nib1, _nib2)
_i = _i + 1
|