[可能的错误] 使用 UC_ERR_FETCH_UNMAPPED 无法获取基于剪切的地址
def hook_code64(uc, address, size, user_data): print(f">>> Tracing instruction at {address:#0{18}x}, instruction size = {size:#0{18}x}") rip = uc.reg_read(UC_X86_REG_RIP) print(f">>> RIP is {rip:#0{18}x}");
def main(): data = os.urandom(4096) mu = Uc(UC_ARCH_X86, UC_MODE_64) mu.mem_map(ADDRESS, 14410241024) mu.mem_write(ADDRESS, X86_CODE64) mu.mem_write(DATA_ADDR, data) mu.reg_write(UC_X86_REG_RSP, STACK_ADDR) mu.reg_write(UC_X86_REG_RDI, DATA_ADDR) mu.hook_add(UC_HOOK_CODE, hook_code64) try: mu.emu_start(ADDRESS,ADDRESS+8) print(f"Result={mu.reg_read(UC_X86_REG_RAX):#0{18}x}") except UcError as err: print(f"!!! Unicorn Engine Exception: {err}") print(f"!!! RIP is {mu.reg_read(UC_X86_REG_RIP):#0{18}x}")
if name == 'main': main()
内容来源: unicorn-engine/unicorn