milestones-uart-first-byte-sdhci-touch-initblock
This commit is contained in:
+20
-1
@@ -10,7 +10,8 @@ import struct
|
|||||||
import sys
|
import sys
|
||||||
|
|
||||||
from unicorn import (Uc, UC_ARCH_ARM, UC_MODE_THUMB, UC_HOOK_MEM_UNMAPPED,
|
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,
|
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_R3, UC_ARM_REG_R4, UC_ARM_REG_R5,
|
||||||
UC_ARM_REG_R6, UC_ARM_REG_R7, UC_ARM_REG_R8,
|
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):
|
def hook_uw(mu, access, addr, size, value, data):
|
||||||
if addr == UART_TF:
|
if addr == UART_TF:
|
||||||
uart_out.append(chr(value & 0xFF))
|
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)
|
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)
|
entry = load_elf(mu, path)
|
||||||
for r in range(13):
|
for r in range(13):
|
||||||
mu.reg_write(UC_ARM_REG_R0 + r, 0)
|
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])]
|
_trap_n = [int(sys.argv[sys.argv.index("--trapn") + 1])]
|
||||||
_spmax = [0x085FFF00]
|
_spmax = [0x085FFF00]
|
||||||
_spd = [None]
|
_spd = [None]
|
||||||
|
_ms = [ [0x802F970, 0x802F974, 'initblock-call2'],
|
||||||
|
[0x802F99E, 0x802F9A2, 'initblock-ret']]
|
||||||
_spb = {} if '--sphist' in sys.argv else None
|
_spb = {} if '--sphist' in sys.argv else None
|
||||||
_tpop = [] if '--tpop' in sys.argv else None
|
_tpop = [] if '--tpop' in sys.argv else None
|
||||||
_splog = [] if "--spytrack" 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):
|
def hook_code(mu, addr, size, data):
|
||||||
count[0] += 1
|
count[0] += 1
|
||||||
last[0] = addr
|
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:
|
if _spb is not None:
|
||||||
try:
|
try:
|
||||||
_spn = mu.reg_read(UC_ARM_REG_SP)
|
_spn = mu.reg_read(UC_ARM_REG_SP)
|
||||||
|
|||||||
Reference in New Issue
Block a user