32 lines
936 B
Python
32 lines
936 B
Python
#!/usr/bin/env python3
|
|
"""dis.py — quick capstone disassembler for soothe_mem.bin (base 0x180000000).
|
|
Usage: dis.py <VA> [len] [va2 len2 ...]
|
|
"""
|
|
import sys
|
|
from capstone import Cs, CS_ARCH_X86, CS_MODE_64
|
|
|
|
BASE = 0x180000000
|
|
_data = open('/home/m/re-tools/soothe_mem.bin', 'rb').read()
|
|
|
|
def dis(va, n=256):
|
|
off = va - BASE
|
|
code = _data[off:off + n]
|
|
md = Cs(CS_ARCH_X86, CS_MODE_64)
|
|
md.detail = False
|
|
out = []
|
|
for ins in md.disasm(code, va):
|
|
s = '%08x %-24s %s %s' % (ins.address, ins.bytes.hex(),
|
|
ins.mnemonic, ins.op_str)
|
|
out.append(s)
|
|
if ins.mnemonic == 'ret':
|
|
break
|
|
return '\n'.join(out)
|
|
|
|
if __name__ == '__main__':
|
|
a = sys.argv[1:]
|
|
for i in range(0, len(a), 2):
|
|
va = int(a[i], 16)
|
|
n = int(a[i + 1], 16) if i + 1 < len(a) else 256
|
|
print('==== %x (len %x) ====' % (va, n))
|
|
print(dis(va, n))
|