diff --git a/tools/sbl_uni.py b/tools/sbl_uni.py index 983b456..371282f 100644 --- a/tools/sbl_uni.py +++ b/tools/sbl_uni.py @@ -10,7 +10,8 @@ import struct import sys from unicorn import (Uc, UC_ARCH_ARM, UC_MODE_THUMB, UC_HOOK_MEM_UNMAPPED, - UC_HOOK_MEM_WRITE, UC_HOOK_CODE) + UC_HOOK_MEM_WRITE, UC_HOOK_CODE, + UC_HOOK_MEM_READ) from unicorn.arm_const import (UC_ARM_REG_R0, UC_ARM_REG_R1, UC_ARM_REG_R2, UC_ARM_REG_R3, UC_ARM_REG_R4, UC_ARM_REG_R5, UC_ARM_REG_R6, UC_ARM_REG_R7, UC_ARM_REG_R8, @@ -89,8 +90,18 @@ def main(): def hook_uw(mu, access, addr, size, value, data): if addr == UART_TF: uart_out.append(chr(value & 0xFF)) + if len(uart_out) == 1: + print('MILESTONE uart-first-byte insn#', count[0], flush=True) mu.hook_add(UC_HOOK_MEM_WRITE, hook_uw, begin=UART_TF, end=UART_TF) + _mio = [] + def hook_mio(mu, access, addr, size, value, data): + if not _mio: + from unicorn import UC_MEM_READ as _MR + print('MILESTONE sdhci-touch', 'read' if access == _MR else 'write', 'insn#', count[0], flush=True) + _mio.append(addr) + mu.hook_add(UC_HOOK_MEM_READ, hook_mio, begin=0x07824000, end=0x07825000) + mu.hook_add(UC_HOOK_MEM_WRITE, hook_mio, begin=0x07824000, end=0x07825000) entry = load_elf(mu, path) for r in range(13): mu.reg_write(UC_ARM_REG_R0 + r, 0) @@ -139,6 +150,8 @@ def main(): _trap_n = [int(sys.argv[sys.argv.index("--trapn") + 1])] _spmax = [0x085FFF00] _spd = [None] + _ms = [ [0x802F970, 0x802F974, 'initblock-call2'], + [0x802F99E, 0x802F9A2, 'initblock-ret']] _spb = {} if '--sphist' in sys.argv else None _tpop = [] if '--tpop' in sys.argv else None _splog = [] if "--spytrack" in sys.argv else None @@ -157,6 +170,12 @@ def main(): def hook_code(mu, addr, size, data): count[0] += 1 last[0] = addr + if _ms: + for _m in _ms: + if _m[0] <= addr < _m[1]: + print('MILESTONE', _m[2], 'insn#', count[0], flush=True) + _ms.remove(_m) + break if _spb is not None: try: _spn = mu.reg_read(UC_ARM_REG_SP)