mirror of https://github.com/commaai/tinygrad.git
23 lines
607 B
Python
23 lines
607 B
Python
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])
|