4 from __future__
import print_function
7 from xprint
import to_hex, to_x
10 MIPS_CODE = b
"\x0C\x10\x00\x97\x00\x00\x00\x00\x24\x02\x00\x0c\x8f\xa2\x00\x00\x34\x21\x34\x56"
11 MIPS_CODE2 = b
"\x56\x34\x21\x34\xc2\x17\x01\x00"
12 MIPS_32R6M = b
"\x00\x07\x00\x07\x00\x11\x93\x7c\x01\x8c\x8b\x7c\x00\xc7\x48\xd0"
13 MIPS_32R6 = b
"\xec\x80\x00\x19\x7c\x43\x22\xa0"
16 (CS_ARCH_MIPS, CS_MODE_MIPS32 + CS_MODE_BIG_ENDIAN, MIPS_CODE,
"MIPS-32 (Big-endian)"),
17 (CS_ARCH_MIPS, CS_MODE_MIPS64 + CS_MODE_LITTLE_ENDIAN, MIPS_CODE2,
"MIPS-64-EL (Little-endian)"),
18 (CS_ARCH_MIPS, CS_MODE_MIPS32R6 + CS_MODE_MICRO + CS_MODE_BIG_ENDIAN, MIPS_32R6M,
"MIPS-32R6 | Micro (Big-endian)"),
19 (CS_ARCH_MIPS, CS_MODE_MIPS32R6 + CS_MODE_BIG_ENDIAN, MIPS_32R6,
"MIPS-32R6 (Big-endian)"),
25 print(
"0x%x:\t%s\t%s" % (insn.address, insn.mnemonic, insn.op_str))
31 if len(insn.operands) > 0:
32 print(
"\top_count: %u" %
len(insn.operands))
34 for i
in insn.operands:
36 if i.type == MIPS_OP_REG:
37 print(
"\t\toperands[%u].type: REG = %s" % (c, insn.reg_name(i.reg)))
38 if i.type == MIPS_OP_IMM:
39 print(
"\t\toperands[%u].type: IMM = 0x%s" % (c,
to_x(i.imm)))
40 if i.type == MIPS_OP_MEM:
41 print(
"\t\toperands[%u].type: MEM" % c)
43 print(
"\t\t\toperands[%u].mem.base: REG = %s" \
44 % (c, insn.reg_name(i.mem.base)))
46 print(
"\t\t\toperands[%u].mem.disp: 0x%s" \
47 % (c,
to_x(i.mem.disp)))
52 for (arch, mode, code, comment)
in all_tests:
54 print(
"Platform: %s" % comment)
55 print(
"Code: %s" %
to_hex(code))
61 for insn
in md.disasm(code, 0x1000):
65 print(
"0x%x:\n" % (insn.address + insn.size))
67 print(
"ERROR: %s" % e)
70 if __name__ ==
'__main__':
def print_insn_detail(insn)
def to_hex(s, prefix_0x=True)