1*9a0e4156SSadaf Ebrahimi# Capstone Python bindings, by Wolfgang Schwotzer <[email protected]> 2*9a0e4156SSadaf Ebrahimi 3*9a0e4156SSadaf Ebrahimiimport ctypes 4*9a0e4156SSadaf Ebrahimifrom . import copy_ctypes_list 5*9a0e4156SSadaf Ebrahimifrom .m680x_const import * 6*9a0e4156SSadaf Ebrahimi 7*9a0e4156SSadaf Ebrahimi# define the API 8*9a0e4156SSadaf Ebrahimiclass M680xOpIdx(ctypes.Structure): 9*9a0e4156SSadaf Ebrahimi _fields_ = ( 10*9a0e4156SSadaf Ebrahimi ('base_reg', ctypes.c_uint), 11*9a0e4156SSadaf Ebrahimi ('offset_reg', ctypes.c_uint), 12*9a0e4156SSadaf Ebrahimi ('offset', ctypes.c_int16), 13*9a0e4156SSadaf Ebrahimi ('offset_addr', ctypes.c_uint16), 14*9a0e4156SSadaf Ebrahimi ('offset_bits', ctypes.c_uint8), 15*9a0e4156SSadaf Ebrahimi ('inc_dec', ctypes.c_int8), 16*9a0e4156SSadaf Ebrahimi ('flags', ctypes.c_uint8), 17*9a0e4156SSadaf Ebrahimi ) 18*9a0e4156SSadaf Ebrahimi 19*9a0e4156SSadaf Ebrahimiclass M680xOpRel(ctypes.Structure): 20*9a0e4156SSadaf Ebrahimi _fields_ = ( 21*9a0e4156SSadaf Ebrahimi ('address', ctypes.c_uint16), 22*9a0e4156SSadaf Ebrahimi ('offset', ctypes.c_int16), 23*9a0e4156SSadaf Ebrahimi ) 24*9a0e4156SSadaf Ebrahimi 25*9a0e4156SSadaf Ebrahimiclass M680xOpExt(ctypes.Structure): 26*9a0e4156SSadaf Ebrahimi _fields_ = ( 27*9a0e4156SSadaf Ebrahimi ('address', ctypes.c_uint16), 28*9a0e4156SSadaf Ebrahimi ('indirect', ctypes.c_bool), 29*9a0e4156SSadaf Ebrahimi ) 30*9a0e4156SSadaf Ebrahimi 31*9a0e4156SSadaf Ebrahimiclass M680xOpValue(ctypes.Union): 32*9a0e4156SSadaf Ebrahimi _fields_ = ( 33*9a0e4156SSadaf Ebrahimi ('imm', ctypes.c_int32), 34*9a0e4156SSadaf Ebrahimi ('reg', ctypes.c_uint), 35*9a0e4156SSadaf Ebrahimi ('idx', M680xOpIdx), 36*9a0e4156SSadaf Ebrahimi ('rel', M680xOpRel), 37*9a0e4156SSadaf Ebrahimi ('ext', M680xOpExt), 38*9a0e4156SSadaf Ebrahimi ('direct_addr', ctypes.c_uint8), 39*9a0e4156SSadaf Ebrahimi ('const_val', ctypes.c_uint8), 40*9a0e4156SSadaf Ebrahimi ) 41*9a0e4156SSadaf Ebrahimi 42*9a0e4156SSadaf Ebrahimiclass M680xOp(ctypes.Structure): 43*9a0e4156SSadaf Ebrahimi _fields_ = ( 44*9a0e4156SSadaf Ebrahimi ('type', ctypes.c_uint), 45*9a0e4156SSadaf Ebrahimi ('value', M680xOpValue), 46*9a0e4156SSadaf Ebrahimi ('size', ctypes.c_uint8), 47*9a0e4156SSadaf Ebrahimi ('access', ctypes.c_uint8), 48*9a0e4156SSadaf Ebrahimi ) 49*9a0e4156SSadaf Ebrahimi 50*9a0e4156SSadaf Ebrahimi @property 51*9a0e4156SSadaf Ebrahimi def imm(self): 52*9a0e4156SSadaf Ebrahimi return self.value.imm 53*9a0e4156SSadaf Ebrahimi 54*9a0e4156SSadaf Ebrahimi @property 55*9a0e4156SSadaf Ebrahimi def reg(self): 56*9a0e4156SSadaf Ebrahimi return self.value.reg 57*9a0e4156SSadaf Ebrahimi 58*9a0e4156SSadaf Ebrahimi @property 59*9a0e4156SSadaf Ebrahimi def idx(self): 60*9a0e4156SSadaf Ebrahimi return self.value.idx 61*9a0e4156SSadaf Ebrahimi 62*9a0e4156SSadaf Ebrahimi @property 63*9a0e4156SSadaf Ebrahimi def rel(self): 64*9a0e4156SSadaf Ebrahimi return self.value.rel 65*9a0e4156SSadaf Ebrahimi 66*9a0e4156SSadaf Ebrahimi @property 67*9a0e4156SSadaf Ebrahimi def ext(self): 68*9a0e4156SSadaf Ebrahimi return self.value.ext 69*9a0e4156SSadaf Ebrahimi 70*9a0e4156SSadaf Ebrahimi @property 71*9a0e4156SSadaf Ebrahimi def direct_addr(self): 72*9a0e4156SSadaf Ebrahimi return self.value.direct_addr 73*9a0e4156SSadaf Ebrahimi 74*9a0e4156SSadaf Ebrahimi @property 75*9a0e4156SSadaf Ebrahimi def const_val(self): 76*9a0e4156SSadaf Ebrahimi return self.value.const_val 77*9a0e4156SSadaf Ebrahimi 78*9a0e4156SSadaf Ebrahimi 79*9a0e4156SSadaf Ebrahimiclass CsM680x(ctypes.Structure): 80*9a0e4156SSadaf Ebrahimi _fields_ = ( 81*9a0e4156SSadaf Ebrahimi ('flags', ctypes.c_uint8), 82*9a0e4156SSadaf Ebrahimi ('op_count', ctypes.c_uint8), 83*9a0e4156SSadaf Ebrahimi ('operands', M680xOp * 9), 84*9a0e4156SSadaf Ebrahimi ) 85*9a0e4156SSadaf Ebrahimi 86*9a0e4156SSadaf Ebrahimidef get_arch_info(a): 87*9a0e4156SSadaf Ebrahimi return (a.flags, copy_ctypes_list(a.operands[:a.op_count])) 88*9a0e4156SSadaf Ebrahimi 89