milestones-uart-first-byte-sdhci-touch-initblock
This commit is contained in:
+20
-1
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user