webkit  2cdf99a9e3038c7e01b3c37e8ad903ecbe5eecf1
https://github.com/WebKit/webkit
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
udis86_types.h
Go to the documentation of this file.
1 /* udis86 - libudis86/types.h
2  *
3  * Copyright (c) 2002-2013 Vivek Thampi
4  * All rights reserved.
5  *
6  * Redistribution and use in source and binary forms, with or without modification,
7  * are permitted provided that the following conditions are met:
8  *
9  * * Redistributions of source code must retain the above copyright notice,
10  * this list of conditions and the following disclaimer.
11  * * Redistributions in binary form must reproduce the above copyright notice,
12  * this list of conditions and the following disclaimer in the documentation
13  * and/or other materials provided with the distribution.
14  *
15  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
16  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
17  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
18  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
19  * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
20  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
21  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
22  * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
24  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25  */
26 #ifndef UD_TYPES_H
27 #define UD_TYPES_H
28 
29 #ifdef __KERNEL__
30  /*
31  * -D__KERNEL__ is automatically passed on the command line when
32  * building something as part of the Linux kernel. Assume standalone
33  * mode.
34  */
35 # include <linux/kernel.h>
36 # include <linux/string.h>
37 # ifndef __UD_STANDALONE__
38 # define __UD_STANDALONE__ 1
39 # endif
40 #endif /* __KERNEL__ */
41 
42 #if !defined(__UD_STANDALONE__)
43 # include <stdint.h>
44 # include <stdio.h>
45 #endif
46 
47 /* gcc specific extensions */
48 #ifdef __GNUC__
49 # define UD_ATTR_PACKED __attribute__((packed))
50 #else
51 # define UD_ATTR_PACKED
52 #endif /* UD_ATTR_PACKED */
53 
54 
55 /* -----------------------------------------------------------------------------
56  * All possible "types" of objects in udis86. Order is Important!
57  * -----------------------------------------------------------------------------
58  */
59 enum ud_type
60 {
62 
63  /* 8 bit GPRs */
69 
70  /* 16 bit GPRs */
75 
76  /* 32 bit GPRs */
81 
82  /* 64 bit GPRs */
87 
88  /* segment registers */
91 
92  /* control registers*/
97 
98  /* debug registers */
103 
104  /* mmx registers */
107 
108  /* x87 registers */
111 
112  /* extended multimedia registers */
117 
118  /* 256B multimedia registers */
123 
125 
126  /* Operand Types */
129 };
130 
131 #include "udis86_itab.h"
132 
133 union ud_lval {
142  struct {
145  } ptr;
146 };
147 
148 /* -----------------------------------------------------------------------------
149  * struct ud_operand - Disassembled instruction Operand.
150  * -----------------------------------------------------------------------------
151  */
152 struct ud_operand {
153  enum ud_type type;
155  enum ud_type base;
159  union ud_lval lval;
160  /*
161  * internal use only
162  */
163  uint64_t _legacy; /* this will be removed in 1.8 */
165 };
166 
167 /* -----------------------------------------------------------------------------
168  * struct ud - The udis86 object.
169  * -----------------------------------------------------------------------------
170  */
171 struct ud
172 {
173  /*
174  * input buffering
175  */
176  int (*inp_hook) (struct ud*);
177 #ifndef __UD_STANDALONE__
179 #endif
180  const uint8_t* inp_buf;
181  size_t inp_buf_size;
184  size_t inp_ctr;
186  int inp_end;
187  int inp_peek;
188 
189  void (*translator)(struct ud*);
191  char insn_hexcode[64];
192 
193  /*
194  * Assembly output buffer
195  */
196  char *asm_buf;
197  size_t asm_buf_size;
198  size_t asm_buf_fill;
199  char asm_buf_int[128];
200 
201  /*
202  * Symbol resolver for use in the translation phase.
203  */
204  const char* (*sym_resolver)(struct ud*, uint64_t addr, int64_t *offset);
205 
210  struct ud_operand operand[4];
236 };
237 
238 /* -----------------------------------------------------------------------------
239  * Type-definitions
240  * -----------------------------------------------------------------------------
241  */
242 typedef enum ud_type ud_type_t;
244 
245 typedef struct ud ud_t;
246 typedef struct ud_operand ud_operand_t;
247 
248 #define UD_SYN_INTEL ud_translate_intel
249 #define UD_SYN_ATT ud_translate_att
250 #define UD_EOI (-1)
251 #define UD_INP_CACHE_SZ 32
252 #define UD_VENDOR_AMD 0
253 #define UD_VENDOR_INTEL 1
254 #define UD_VENDOR_ANY 2
255 
256 #endif
257 
258 /*
259 vim: set ts=2 sw=2 expandtab
260 */
Definition: udis86_types.h:84
Definition: udis86_types.h:120
Definition: udis86_types.h:109
Definition: udis86_types.h:110
uint8_t _oprcode
Definition: udis86_types.h:164
Definition: udis86_types.h:116
Definition: udis86_types.h:79
size_t inp_ctr
Definition: udis86_types.h:184
Definition: udis86_types.h:120
uint8_t br_near
Definition: udis86_types.h:225
Definition: udis86_types.h:102
Definition: udis86_types.h:100
uint8_t vex_b2
Definition: udis86_types.h:231
uint64_t pc
Definition: udis86_types.h:207
Definition: udis86_types.h:80
Definition: udis86_types.h:102
unsigned long long uint64_t
Definition: ptypes.h:120
Definition: udis86_types.h:95
Definition: udis86_types.h:89
Definition: udis86_types.h:64
Definition: udis86_types.h:66
Definition: udis86_types.h:113
Definition: udis86_types.h:106
enum ud_type ud_type_t
Definition: udis86_types.h:242
Definition: udis86_types.h:105
void * user_opaque_data
Definition: udis86_types.h:233
Definition: udis86_types.h:64
uint8_t inp_curr
Definition: udis86_types.h:183
Definition: udis86_types.h:83
Definition: udis86_decode.h:172
Definition: udis86_types.h:86
uint8_t dis_mode
Definition: udis86_types.h:206
Definition: udis86_types.h:85
Definition: udis86_types.h:72
Definition: udis86_types.h:65
uint32_t off
Definition: udis86_types.h:144
Definition: udis86_types.h:99
Definition: udis86_types.h:114
signed int int32_t
Definition: ptypes.h:101
Definition: udis86_types.h:121
Definition: udis86_types.h:119
Definition: udis86_types.h:119
uint16_t size
Definition: udis86_types.h:154
Definition: udis86_types.h:94
uint8_t vex_b1
Definition: udis86_types.h:230
unsigned int uint32_t
Definition: ptypes.h:105
uint8_t pfx_repne
Definition: udis86_types.h:221
uint8_t vendor
Definition: udis86_types.h:208
Definition: udis86_decode.h:182
uint8_t ubyte
Definition: udis86_types.h:135
Definition: udis86_types.h:71
Definition: udis86_types.h:171
Definition: udis86_types.h:93
uint8_t modrm_offset
Definition: udis86_types.h:228
Definition: udis86_types.h:95
Definition: udis86_types.h:94
Definition: udis86_types.h:100
Definition: udis86_types.h:77
Definition: udis86_types.h:110
Definition: udis86_types.h:93
Definition: udis86_types.h:105
Definition: udis86_types.h:106
size_t inp_buf_index
Definition: udis86_types.h:182
Definition: udis86_types.h:83
Definition: udis86_types.h:115
enum ud_mnemonic_code ud_mnemonic_code_t
Definition: udis86_types.h:243
Definition: udis86_types.h:113
uint8_t pfx_adr
Definition: udis86_types.h:216
Definition: udis86_types.h:89
Definition: udis86_types.h:79
Definition: udis86_types.h:105
Definition: udis86_types.h:78
Definition: udis86_types.h:96
Definition: udis86_types.h:73
Definition: udis86_types.h:122
uint64_t uqword
Definition: udis86_types.h:141
int FILE
Definition: antglob.py:49
signed long long int64_t
Definition: ptypes.h:112
Definition: udis86_types.h:99
Definition: udis86_types.h:86
Definition: udis86_types.h:61
signed short int16_t
Definition: ptypes.h:93
enum ud_mnemonic_code mnemonic
Definition: udis86_types.h:209
Definition: udis86_types.h:77
Definition: udis86_types.h:120
Definition: udis86_types.h:66
Definition: udis86_types.h:66
Definition: udis86_types.h:115
Definition: udis86_types.h:85
Definition: udis86_types.h:115
uint8_t modrm
Definition: udis86_types.h:227
Definition: udis86_types.h:122
Definition: udis86_types.h:109
Definition: udis86_types.h:71
Definition: udis86_types.h:68
Definition: udis86_types.h:113
uint8_t offset
Definition: udis86_types.h:158
uint8_t scale
Definition: udis86_types.h:157
uint8_t pfx_seg
Definition: udis86_types.h:214
Definition: udis86_types.h:122
Definition: udis86_types.h:86
uint32_t udword
Definition: udis86_types.h:139
void
Definition: AVFoundationCFSoftLinking.h:81
uint8_t primary_opcode
Definition: udis86_types.h:232
Definition: udis86_types.h:79
Definition: udis86_types.h:100
char * asm_buf
Definition: udis86_types.h:196
int
Definition: runtests.py:53
Definition: udis86_types.h:71
EGLStreamKHR EGLint EGLint offset
Definition: eglext.h:984
Definition: udis86_types.h:73
Definition: udis86_types.h:127
uint16_t uword
Definition: udis86_types.h:137
Definition: udis86_types.h:96
Definition: udis86_types.h:90
Definition: udis86_types.h:89
Definition: udis86_types.h:67
uint64_t insn_offset
Definition: udis86_types.h:190
char asm_buf_int[128]
Definition: udis86_types.h:199
Definition: udis86_types.h:116
int8_t sbyte
Definition: udis86_types.h:134
Definition: udis86_types.h:128
Definition: udis86_types.h:84
Definition: udis86_types.h:110
uint8_t pfx_str
Definition: udis86_types.h:218
GLuint index
Definition: gl2.h:383
Definition: udis86_types.h:127
unsigned char uint8_t
Definition: ptypes.h:89
Definition: udis86_types.h:79
Definition: udis86_types.h:85
unsigned short uint16_t
Definition: ptypes.h:97
struct ud_lval::@547 ptr
uint8_t opr_mode
Definition: udis86_types.h:222
Definition: udis86_types.h:90
Definition: udis86_types.h:95
Definition: udis86_types.h:119
Definition: udis86_types.h:74
uint8_t br_far
Definition: udis86_types.h:224
char insn_hexcode[64]
Definition: udis86_types.h:191
Definition: udis86_types.h:84
Definition: udis86_types.h:93
Definition: udis86_types.h:65
Definition: udis86_types.h:121
Definition: udis86_types.h:72
Definition: udis86_types.h:74
Definition: udis86_types.h:114
Definition: udis86_types.h:122
Definition: udis86_types.h:96
Definition: udis86_types.h:68
void(* translator)(struct ud *)
Definition: udis86_types.h:189
int32_t sdword
Definition: udis86_types.h:138
Definition: udis86_types.h:116
ud_mnemonic_code
Definition: udis86_itab.h:25
Definition: udis86_types.h:109
uint64_t _legacy
Definition: udis86_types.h:163
size_t asm_buf_fill
Definition: udis86_types.h:198
struct ud_itab_entry * itab_entry
Definition: udis86_types.h:234
Definition: udis86_types.h:127
Definition: udis86_types.h:116
Definition: udis86_types.h:100
size_t inp_buf_size
Definition: udis86_types.h:181
Definition: udis86_types.h:101
Definition: udis86_types.h:84
Definition: udis86_types.h:73
Definition: udis86_types.h:121
Definition: udis86_types.h:119
Definition: safe_conversions.h:16
uint8_t pfx_rex
Definition: udis86_types.h:213
Definition: udis86_types.h:127
EGLenum type
Definition: eglext.h:63
Definition: udis86_types.h:73
Definition: udis86_types.h:99
Definition: udis86_types.h:67
uint8_t pfx_rep
Definition: udis86_types.h:219
FILE * inp_file
Definition: udis86_types.h:178
Definition: udis86_types.h:74
int inp_peek
Definition: udis86_types.h:187
Definition: udis86_types.h:99
uint8_t _rex
Definition: udis86_types.h:212
Definition: udis86_types.h:96
uint8_t have_modrm
Definition: udis86_types.h:226
Definition: udis86_types.h:101
Definition: udis86_types.h:89
Definition: udis86_types.h:65
uint16_t seg
Definition: udis86_types.h:143
uint8_t pfx_repe
Definition: udis86_types.h:220
uint8_t pfx_lock
Definition: udis86_types.h:217
Definition: udis86_types.h:94
Definition: udis86_types.h:77
Definition: udis86_types.h:72
Definition: udis86_types.h:95
Definition: udis86_types.h:78
Definition: udis86_types.h:83
Definition: udis86_types.h:68
Definition: udis86_types.h:121
Definition: udis86_types.h:105
Definition: udis86_types.h:86
Definition: udis86_types.h:124
Definition: udis86_types.h:133
Definition: udis86_types.h:83
uint8_t error
Definition: udis86_types.h:211
Definition: udis86_types.h:106
Definition: udis86_types.h:71
Definition: udis86_types.h:67
Definition: udis86_types.h:72
size_t asm_buf_size
Definition: udis86_types.h:197
Definition: udis86_types.h:65
int64_t sqword
Definition: udis86_types.h:140
struct ud_lookup_table_list_entry * le
Definition: udis86_types.h:235
uint8_t pfx_opr
Definition: udis86_types.h:215
signed char int8_t
Definition: ptypes.h:85
Definition: udis86_types.h:80
Definition: udis86_types.h:80
Definition: udis86_types.h:152
uint8_t inp_sess[64]
Definition: udis86_types.h:185
Definition: udis86_types.h:102
Definition: udis86_types.h:120
uint8_t vex_op
Definition: udis86_types.h:229
Definition: udis86_types.h:109
uint8_t adr_mode
Definition: udis86_types.h:223
Definition: udis86_types.h:94
Definition: udis86_types.h:102
Definition: udis86_types.h:85
Definition: udis86_types.h:74
Definition: udis86_types.h:77
Definition: udis86_types.h:67
Definition: udis86_types.h:66
Definition: udis86_types.h:80
int16_t sword
Definition: udis86_types.h:136
Definition: udis86_types.h:64
const uint8_t * inp_buf
Definition: udis86_types.h:180
Definition: udis86_types.h:78
Definition: udis86_types.h:128
Definition: udis86_types.h:114
Definition: udis86_types.h:106
Definition: udis86_types.h:115
Definition: udis86_types.h:68
Definition: udis86_types.h:64
Definition: udis86_types.h:101
Definition: udis86_types.h:101
int inp_end
Definition: udis86_types.h:186
Definition: udis86_types.h:93
Definition: udis86_types.h:113
Definition: udis86_types.h:78
Definition: udis86_types.h:114
Definition: udis86_types.h:110
ud_type
Definition: udis86_types.h:59