From fe51b9a9aee15e524c4576f3d71bad71eca9fb58 Mon Sep 17 00:00:00 2001 From: Sean Heelan Date: Thu, 3 Sep 2015 00:48:20 +0700 Subject: [PATCH] Regression test for issue #98 This is a problem with sign extension during uc_reg_write --- regress/reg_write_sign_extension.py | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 regress/reg_write_sign_extension.py diff --git a/regress/reg_write_sign_extension.py b/regress/reg_write_sign_extension.py new file mode 100644 index 00000000..69347c0f --- /dev/null +++ b/regress/reg_write_sign_extension.py @@ -0,0 +1,23 @@ +#!/usr/bin/env python + +"""See https://github.com/unicorn-engine/unicorn/issues/98""" + +import unicorn +ADDR = 0xffaabbcc + +def hook_mem_invalid(mu, access, address, size, value, user_data): + print ">>> Expected value: 0x%x, actual value: 0x%x" % (ADDR, address) + assert(address == ADDR) + mu.mem_map(address & 0xfffff000, 4 * 1024) + mu.mem_write(address, b'\xcc') + return True + +mu = unicorn.Uc(unicorn.UC_ARCH_X86, unicorn.UC_MODE_32) +mu.reg_write(unicorn.x86_const.UC_X86_REG_EBX, ADDR) + +mu.mem_map(0x10000000, 1024 * 4) +# jmp ebx +mu.mem_write(0x10000000, b'\xff\xe3') + +mu.hook_add(unicorn.UC_HOOK_MEM_INVALID, hook_mem_invalid) +mu.emu_start(0x10000000, 0x10000000 + 2, count=1)