You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
22 lines
607 B
22 lines
607 B
import ctypes
|
|
import os
|
|
import pathlib
|
|
import struct
|
|
from hexdump import hexdump
|
|
|
|
fxn = None
|
|
def disasm_raw(buf):
|
|
global fxn
|
|
if fxn is None:
|
|
shared = pathlib.Path(__file__).parent / "disasm.so"
|
|
if not shared.is_file():
|
|
os.system(f'cd {pathlib.Path(__file__).parent} && gcc -shared disasm-a3xx.c -o disasm.so')
|
|
fxn = ctypes.CDLL(shared.as_posix())['disasm']
|
|
fxn(buf, len(buf))
|
|
|
|
def disasm(buf):
|
|
def _read_lib(off): return struct.unpack("I", buf[off:off+4])[0]
|
|
|
|
image_offset = _read_lib(0xc0)
|
|
image_size = _read_lib(0x100)
|
|
disasm_raw(buf[image_offset:image_offset+image_size])
|
|
|