1# Capstone Python bindings, by Nguyen Anh Quynnh <aquynh@gmail.com>
2
3import ctypes
4from . import copy_ctypes_list
5from .sysz_const import *
6
7# define the API
8class 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
16class SyszOpValue(ctypes.Union):
17    _fields_ = (
18        ('reg', ctypes.c_uint),
19        ('imm', ctypes.c_int64),
20        ('mem', SyszOpMem),
21    )
22
23class 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
42class CsSysz(ctypes.Structure):
43    _fields_ = (
44        ('cc', ctypes.c_uint),
45        ('op_count', ctypes.c_uint8),
46        ('operands', SyszOp * 6),
47    )
48
49def get_arch_info(a):
50    return (a.cc, copy_ctypes_list(a.operands[:a.op_count]))
51
52