#!/usr/bin/python # By Ryan Hileman, issue #16 from unicorn import * from unicorn.arm_const import * from unicorn.arm64_const import * import regress class WrongSPArm(regress.RegressTest): def test_32(self): with self.assertRaises(UcError): uc = Uc(UC_ARCH_ARM, UC_MODE_32) uc.reg_write(UC_ARM_REG_SP, 4) def test_64(self): uc = Uc(UC_ARCH_ARM64, UC_MODE_ARM) uc.reg_write(UC_ARM64_REG_SP, 4) self.assertEqual(0x4, uc.reg_read(UC_ARM64_REG_SP)) def test_arm(self): uc = Uc(UC_ARCH_ARM, UC_MODE_ARM) uc.reg_write(UC_ARM_REG_SP, 4) self.assertEqual(0x4, uc.reg_read(UC_ARM_REG_SP)) if __name__ == '__main__': regress.main()
CODE = open(os.path.join(os.path.dirname(os.path.realpath(__file__)), "x86_self_modifying.elf")).read() CODE_SIZE = len(CODE) + (0x1000 - len(CODE) % 0x1000) STACK_SIZE = 0x8000 ENTRY_POINT = 0x8048074 def hook_intr(uc, intno, data): uc.emu_stop() class SelfModifying(regress.RegressTest): def test_self_modifying(self): uc = Uc(UC_ARCH_X86, UC_MODE_32) uc.mem_map(CODE_ADDR, CODE_SIZE, 5) uc.mem_map(STACK_ADDR, STACK_SIZE, 7) uc.mem_write(CODE_ADDR, CODE) uc.reg_write(UC_X86_REG_ESP, STACK_ADDR + STACK_SIZE) uc.hook_add(UC_HOOK_INTR, hook_intr) uc.emu_start(ENTRY_POINT, -1) retcode = uc.reg_read(UC_X86_REG_EBX) self.assertEqual(retcode, 65) if __name__ == "__main__": regress.main()