1#!/usr/bin/python 2from unicorn import * 3from unicorn.x86_const import * 4 5import regress 6 7ESP = 0x2000 8PAGE_SIZE = 1 * 1024 * 1024 9 10# wait 11# fnstcw word ptr [esp] 12# pop ecx 13CODE = b'\x9B\xD9\x3C\x24\x59' 14 15def hook_mem_write(uc, access, address, size, value, user_data): 16 print("mem WRITE: 0x%x, data size = %u, data value = 0x%x" % (address, size, value)) 17 return True 18 19class FpuWrite(regress.RegressTest): 20 21 def mem_reader(self, mu, addr, size, expected): 22 tmp = mu.mem_read(addr, size) 23 for i, e in zip(tmp, expected): 24 self.assertEquals(e, i) 25 26 def runTest(self): 27 mu = Uc(UC_ARCH_X86, UC_MODE_32) 28 mu.mem_map(0, PAGE_SIZE) 29 mu.mem_write(0, CODE) 30 mu.reg_write(UC_X86_REG_ESP, ESP) 31 32 mu.hook_add(UC_HOOK_MEM_WRITE, hook_mem_write) 33 mu.emu_start(0x0, 5, 0, 2) 34 esp = mu.reg_read(UC_X86_REG_ESP) 35 self.mem_reader(mu, esp, 10, [0] * 10) 36 37if __name__ == '__main__': 38 regress.main() 39