Home | History | Annotate | Download | only in capstone
      1 # Capstone Python bindings, by Nguyen Anh Quynnh <aquynh (at] gmail.com>
      2 
      3 import ctypes
      4 from . import copy_ctypes_list
      5 from .sysz_const import *
      6 
      7 # define the API
      8 class SyszOpMem(ctypes.Structure):
      9     _fields_ = (
     10         ('base', ctypes.c_uint8),
     11         ('index', ctypes.c_uint8),
     12         ('length', ctypes.c_uint64),
     13         ('disp', ctypes.c_int64),
     14     )
     15 
     16 class SyszOpValue(ctypes.Union):
     17     _fields_ = (
     18         ('reg', ctypes.c_uint),
     19         ('imm', ctypes.c_int64),
     20         ('mem', SyszOpMem),
     21     )
     22 
     23 class SyszOp(ctypes.Structure):
     24     _fields_ = (
     25         ('type', ctypes.c_uint),
     26         ('value', SyszOpValue),
     27     )
     28 
     29     @property
     30     def imm(self):
     31         return self.value.imm
     32 
     33     @property
     34     def reg(self):
     35         return self.value.reg
     36 
     37     @property
     38     def mem(self):
     39         return self.value.mem
     40 
     41 
     42 class CsSysz(ctypes.Structure):
     43     _fields_ = (
     44         ('cc', ctypes.c_uint),
     45         ('op_count', ctypes.c_uint8),
     46         ('operands', SyszOp * 6),
     47     )
     48 
     49 def get_arch_info(a):
     50     return (a.cc, copy_ctypes_list(a.operands[:a.op_count]))
     51 
     52