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.
23 lines
607 B
23 lines
607 B
2 months ago
|
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])
|