1*9a0e4156SSadaf Ebrahimi#!/usr/bin/env python 2*9a0e4156SSadaf Ebrahimi 3*9a0e4156SSadaf Ebrahimi# Capstone Python bindings, by Nguyen Anh Quynnh <[email protected]> 4*9a0e4156SSadaf Ebrahimi 5*9a0e4156SSadaf Ebrahimifrom __future__ import print_function 6*9a0e4156SSadaf Ebrahimifrom capstone import * 7*9a0e4156SSadaf Ebrahimifrom capstone.x86 import * 8*9a0e4156SSadaf Ebrahimifrom xprint import to_hex 9*9a0e4156SSadaf Ebrahimi 10*9a0e4156SSadaf Ebrahimi 11*9a0e4156SSadaf EbrahimiX86_CODE32 = b"\x75\x01" 12*9a0e4156SSadaf Ebrahimi 13*9a0e4156SSadaf Ebrahimi 14*9a0e4156SSadaf Ebrahimidef print_insn(md, code): 15*9a0e4156SSadaf Ebrahimi print("%s\t" % to_hex(code, False), end="") 16*9a0e4156SSadaf Ebrahimi 17*9a0e4156SSadaf Ebrahimi for insn in md.disasm(code, 0x1000): 18*9a0e4156SSadaf Ebrahimi print("\t%s\t%s\n" % (insn.mnemonic, insn.op_str)) 19*9a0e4156SSadaf Ebrahimi 20*9a0e4156SSadaf Ebrahimi 21*9a0e4156SSadaf Ebrahimidef test(): 22*9a0e4156SSadaf Ebrahimi try: 23*9a0e4156SSadaf Ebrahimi md = Cs(CS_ARCH_X86, CS_MODE_32) 24*9a0e4156SSadaf Ebrahimi 25*9a0e4156SSadaf Ebrahimi print("Disassemble X86 code with default instruction mnemonic") 26*9a0e4156SSadaf Ebrahimi print_insn(md, X86_CODE32) 27*9a0e4156SSadaf Ebrahimi 28*9a0e4156SSadaf Ebrahimi print("Now customize engine to change mnemonic from 'JNE' to 'JNZ'") 29*9a0e4156SSadaf Ebrahimi md.mnemonic_setup(X86_INS_JNE, "jnz") 30*9a0e4156SSadaf Ebrahimi print_insn(md, X86_CODE32) 31*9a0e4156SSadaf Ebrahimi 32*9a0e4156SSadaf Ebrahimi print("Reset engine to use the default mnemonic") 33*9a0e4156SSadaf Ebrahimi md.mnemonic_setup(X86_INS_JNE, None) 34*9a0e4156SSadaf Ebrahimi print_insn(md, X86_CODE32) 35*9a0e4156SSadaf Ebrahimi except CsError as e: 36*9a0e4156SSadaf Ebrahimi print("ERROR: %s" % e) 37*9a0e4156SSadaf Ebrahimi 38*9a0e4156SSadaf Ebrahimi 39*9a0e4156SSadaf Ebrahimiif __name__ == '__main__': 40*9a0e4156SSadaf Ebrahimi test() 41