libudis86_sys/
types.rs

1use std::fmt;
2use libc;
3
4#[repr(u32)]
5#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
6pub enum ud_type {
7    UD_NONE = 0,
8    UD_R_AL = 1,
9    UD_R_CL = 2,
10    UD_R_DL = 3,
11    UD_R_BL = 4,
12    UD_R_AH = 5,
13    UD_R_CH = 6,
14    UD_R_DH = 7,
15    UD_R_BH = 8,
16    UD_R_SPL = 9,
17    UD_R_BPL = 10,
18    UD_R_SIL = 11,
19    UD_R_DIL = 12,
20    UD_R_R8B = 13,
21    UD_R_R9B = 14,
22    UD_R_R10B = 15,
23    UD_R_R11B = 16,
24    UD_R_R12B = 17,
25    UD_R_R13B = 18,
26    UD_R_R14B = 19,
27    UD_R_R15B = 20,
28    UD_R_AX = 21,
29    UD_R_CX = 22,
30    UD_R_DX = 23,
31    UD_R_BX = 24,
32    UD_R_SP = 25,
33    UD_R_BP = 26,
34    UD_R_SI = 27,
35    UD_R_DI = 28,
36    UD_R_R8W = 29,
37    UD_R_R9W = 30,
38    UD_R_R10W = 31,
39    UD_R_R11W = 32,
40    UD_R_R12W = 33,
41    UD_R_R13W = 34,
42    UD_R_R14W = 35,
43    UD_R_R15W = 36,
44    UD_R_EAX = 37,
45    UD_R_ECX = 38,
46    UD_R_EDX = 39,
47    UD_R_EBX = 40,
48    UD_R_ESP = 41,
49    UD_R_EBP = 42,
50    UD_R_ESI = 43,
51    UD_R_EDI = 44,
52    UD_R_R8D = 45,
53    UD_R_R9D = 46,
54    UD_R_R10D = 47,
55    UD_R_R11D = 48,
56    UD_R_R12D = 49,
57    UD_R_R13D = 50,
58    UD_R_R14D = 51,
59    UD_R_R15D = 52,
60    UD_R_RAX = 53,
61    UD_R_RCX = 54,
62    UD_R_RDX = 55,
63    UD_R_RBX = 56,
64    UD_R_RSP = 57,
65    UD_R_RBP = 58,
66    UD_R_RSI = 59,
67    UD_R_RDI = 60,
68    UD_R_R8 = 61,
69    UD_R_R9 = 62,
70    UD_R_R10 = 63,
71    UD_R_R11 = 64,
72    UD_R_R12 = 65,
73    UD_R_R13 = 66,
74    UD_R_R14 = 67,
75    UD_R_R15 = 68,
76    UD_R_ES = 69,
77    UD_R_CS = 70,
78    UD_R_SS = 71,
79    UD_R_DS = 72,
80    UD_R_FS = 73,
81    UD_R_GS = 74,
82    UD_R_CR0 = 75,
83    UD_R_CR1 = 76,
84    UD_R_CR2 = 77,
85    UD_R_CR3 = 78,
86    UD_R_CR4 = 79,
87    UD_R_CR5 = 80,
88    UD_R_CR6 = 81,
89    UD_R_CR7 = 82,
90    UD_R_CR8 = 83,
91    UD_R_CR9 = 84,
92    UD_R_CR10 = 85,
93    UD_R_CR11 = 86,
94    UD_R_CR12 = 87,
95    UD_R_CR13 = 88,
96    UD_R_CR14 = 89,
97    UD_R_CR15 = 90,
98    UD_R_DR0 = 91,
99    UD_R_DR1 = 92,
100    UD_R_DR2 = 93,
101    UD_R_DR3 = 94,
102    UD_R_DR4 = 95,
103    UD_R_DR5 = 96,
104    UD_R_DR6 = 97,
105    UD_R_DR7 = 98,
106    UD_R_DR8 = 99,
107    UD_R_DR9 = 100,
108    UD_R_DR10 = 101,
109    UD_R_DR11 = 102,
110    UD_R_DR12 = 103,
111    UD_R_DR13 = 104,
112    UD_R_DR14 = 105,
113    UD_R_DR15 = 106,
114    UD_R_MM0 = 107,
115    UD_R_MM1 = 108,
116    UD_R_MM2 = 109,
117    UD_R_MM3 = 110,
118    UD_R_MM4 = 111,
119    UD_R_MM5 = 112,
120    UD_R_MM6 = 113,
121    UD_R_MM7 = 114,
122    UD_R_ST0 = 115,
123    UD_R_ST1 = 116,
124    UD_R_ST2 = 117,
125    UD_R_ST3 = 118,
126    UD_R_ST4 = 119,
127    UD_R_ST5 = 120,
128    UD_R_ST6 = 121,
129    UD_R_ST7 = 122,
130    UD_R_XMM0 = 123,
131    UD_R_XMM1 = 124,
132    UD_R_XMM2 = 125,
133    UD_R_XMM3 = 126,
134    UD_R_XMM4 = 127,
135    UD_R_XMM5 = 128,
136    UD_R_XMM6 = 129,
137    UD_R_XMM7 = 130,
138    UD_R_XMM8 = 131,
139    UD_R_XMM9 = 132,
140    UD_R_XMM10 = 133,
141    UD_R_XMM11 = 134,
142    UD_R_XMM12 = 135,
143    UD_R_XMM13 = 136,
144    UD_R_XMM14 = 137,
145    UD_R_XMM15 = 138,
146    UD_R_YMM0 = 139,
147    UD_R_YMM1 = 140,
148    UD_R_YMM2 = 141,
149    UD_R_YMM3 = 142,
150    UD_R_YMM4 = 143,
151    UD_R_YMM5 = 144,
152    UD_R_YMM6 = 145,
153    UD_R_YMM7 = 146,
154    UD_R_YMM8 = 147,
155    UD_R_YMM9 = 148,
156    UD_R_YMM10 = 149,
157    UD_R_YMM11 = 150,
158    UD_R_YMM12 = 151,
159    UD_R_YMM13 = 152,
160    UD_R_YMM14 = 153,
161    UD_R_YMM15 = 154,
162    UD_R_RIP = 155,
163    UD_OP_REG = 156,
164    UD_OP_MEM = 157,
165    UD_OP_PTR = 158,
166    UD_OP_IMM = 159,
167    UD_OP_JIMM = 160,
168    UD_OP_CONST = 161,
169}
170
171#[repr(C)]
172#[derive(Clone, Copy)]
173pub union ud_lval {
174    pub sbyte: i8,
175    pub ubyte: u8,
176    pub sword: i16,
177    pub uword: u16,
178    pub sdword: i32,
179    pub udword: u32,
180    pub sqword: i64,
181    pub uqword: u64,
182    pub ptr: ud_lval_ptr,
183}
184
185impl fmt::Debug for ud_lval {
186    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
187        write!(f, "ud_lval {{ union }}")
188    }
189}
190
191#[repr(C)]
192#[derive(Debug, Copy, Clone)]
193pub struct ud_lval_ptr {
194    pub seg: u16,
195    pub off: u32,
196}
197
198#[repr(C)]
199#[derive(Debug, Copy, Clone)]
200pub struct ud_operand {
201    pub otype: ud_type,
202    pub size: u16,
203    pub base: ud_type,
204    pub index: ud_type,
205    pub scale: u8,
206    pub offset: u8,
207    pub lval: ud_lval,
208    pub _legacy: u64,
209    pub _oprcode: u8,
210}
211
212#[repr(C)]
213pub struct ud {
214    //
215    // Input buffering
216    //
217    pub inp_hook: ::std::option::Option<unsafe extern "C" fn(arg1: *mut ud) -> libc::c_int>,
218    pub inp_file: *mut libc::FILE,
219    pub inp_buf: *const u8,
220    pub inp_buf_size: usize,
221    pub inp_buf_index: usize,
222    pub inp_curr: u8,
223    pub inp_ctr: usize,
224    pub inp_sess: [u8; 64usize],
225    pub inp_end: libc::c_int,
226    pub inp_peek: libc::c_int,
227
228    pub translator: ::std::option::Option<unsafe extern "C" fn(arg1: *mut ud)>,
229    pub insn_offset: u64,
230    pub insn_hexcode: [libc::c_char; 64usize],
231
232    //
233    // Assembly output buffer
234    //
235    pub asm_buf: *mut libc::c_char,
236    pub asm_buf_size: usize,
237    pub asm_buf_fill: usize,
238    pub asm_buf_int: [libc::c_char; 128usize],
239
240    //
241    // Symbol resolver for use in the translation phase.
242    //
243    pub sym_resolver: ::std::option::Option<unsafe extern "C" fn(arg1: *mut ud, addr: u64, offset: *mut i64) -> *const libc::c_char>,
244
245    pub dis_mode: u8,
246    pub pc: u64,
247    pub vendor: u8,
248    pub mnemonic: ::itab::ud_mnemonic_code,
249    pub operand: [ud_operand; 4usize],
250    pub error: u8,
251    pub _rex: u8,
252    pub pfx_rex: u8,
253    pub pfx_seg: u8,
254    pub pfx_opr: u8,
255    pub pfx_adr: u8,
256    pub pfx_lock: u8,
257    pub pfx_str: u8,
258    pub pfx_rep: u8,
259    pub pfx_repe: u8,
260    pub pfx_repne: u8,
261    pub opr_mode: u8,
262    pub adr_mode: u8,
263    pub br_far: u8,
264    pub br_near: u8,
265    pub have_modrm: u8,
266    pub modrm: u8,
267    pub modrm_offset: u8,
268    pub vex_op: u8,
269    pub vex_b1: u8,
270    pub vex_b2: u8,
271    pub primary_opcode: u8,
272    pub user_opaque_data: *mut libc::c_void,
273    pub itab_entry: *mut (),
274    pub le: *mut (),
275}