1#!/usr/bin/python 2from capstone import * 3from unicorn import * 4 5import regress 6 7class MipsBranchDelay(regress.RegressTest): 8 9 def runTest(self): 10 md = Cs(CS_ARCH_MIPS, CS_MODE_MIPS32 + CS_MODE_LITTLE_ENDIAN) 11 12 def disas(code, addr): 13 for i in md.disasm(code, addr): 14 print '0x%x: %s %-6s %s' % (i.address, str(i.bytes).encode('hex'), i.mnemonic, i.op_str) 15 16 def hook_code(uc, addr, size, _): 17 mem = str(uc.mem_read(addr, size)) 18 disas(mem, addr) 19 20 CODE = 0x400000 21 asm = '0000a4126a00822800000000'.decode('hex') # beq $a0, $s5, 0x4008a0; slti $v0, $a0, 0x6a; nop 22 23 print 'Input instructions:' 24 disas(asm, CODE) 25 print 26 27 print 'Hooked instructions:' 28 29 uc = Uc(UC_ARCH_MIPS, UC_MODE_MIPS32 + UC_MODE_LITTLE_ENDIAN) 30 uc.hook_add(UC_HOOK_CODE, hook_code) 31 uc.mem_map(CODE, 0x1000) 32 uc.mem_write(CODE, asm) 33 self.assertEqual(None, uc.emu_start(CODE, CODE + len(asm))) 34 35if __name__ == '__main__': 36 regress.main() 37