35# include <linux/kernel.h>
36# include <linux/string.h>
37# ifndef __UD_STANDALONE__
38# define __UD_STANDALONE__ 1
42#if !defined(__UD_STANDALONE__)
49# define UD_ATTR_PACKED __attribute__((packed))
51# define UD_ATTR_PACKED
64 UD_R_AL, UD_R_CL, UD_R_DL, UD_R_BL,
65 UD_R_AH, UD_R_CH, UD_R_DH, UD_R_BH,
66 UD_R_SPL, UD_R_BPL, UD_R_SIL, UD_R_DIL,
67 UD_R_R8B, UD_R_R9B, UD_R_R10B, UD_R_R11B,
68 UD_R_R12B, UD_R_R13B, UD_R_R14B, UD_R_R15B,
71 UD_R_AX, UD_R_CX, UD_R_DX, UD_R_BX,
72 UD_R_SP, UD_R_BP, UD_R_SI, UD_R_DI,
73 UD_R_R8W, UD_R_R9W, UD_R_R10W, UD_R_R11W,
74 UD_R_R12W, UD_R_R13W, UD_R_R14W, UD_R_R15W,
77 UD_R_EAX, UD_R_ECX, UD_R_EDX, UD_R_EBX,
78 UD_R_ESP, UD_R_EBP, UD_R_ESI, UD_R_EDI,
79 UD_R_R8D, UD_R_R9D, UD_R_R10D, UD_R_R11D,
80 UD_R_R12D, UD_R_R13D, UD_R_R14D, UD_R_R15D,
83 UD_R_RAX, UD_R_RCX, UD_R_RDX, UD_R_RBX,
84 UD_R_RSP, UD_R_RBP, UD_R_RSI, UD_R_RDI,
85 UD_R_R8, UD_R_R9, UD_R_R10, UD_R_R11,
86 UD_R_R12, UD_R_R13, UD_R_R14, UD_R_R15,
89 UD_R_ES, UD_R_CS, UD_R_SS, UD_R_DS,
93 UD_R_CR0, UD_R_CR1, UD_R_CR2, UD_R_CR3,
94 UD_R_CR4, UD_R_CR5, UD_R_CR6, UD_R_CR7,
95 UD_R_CR8, UD_R_CR9, UD_R_CR10, UD_R_CR11,
96 UD_R_CR12, UD_R_CR13, UD_R_CR14, UD_R_CR15,
99 UD_R_DR0, UD_R_DR1, UD_R_DR2, UD_R_DR3,
100 UD_R_DR4, UD_R_DR5, UD_R_DR6, UD_R_DR7,
101 UD_R_DR8, UD_R_DR9, UD_R_DR10, UD_R_DR11,
102 UD_R_DR12, UD_R_DR13, UD_R_DR14, UD_R_DR15,
105 UD_R_MM0, UD_R_MM1, UD_R_MM2, UD_R_MM3,
106 UD_R_MM4, UD_R_MM5, UD_R_MM6, UD_R_MM7,
109 UD_R_ST0, UD_R_ST1, UD_R_ST2, UD_R_ST3,
110 UD_R_ST4, UD_R_ST5, UD_R_ST6, UD_R_ST7,
113 UD_R_XMM0, UD_R_XMM1, UD_R_XMM2, UD_R_XMM3,
114 UD_R_XMM4, UD_R_XMM5, UD_R_XMM6, UD_R_XMM7,
115 UD_R_XMM8, UD_R_XMM9, UD_R_XMM10, UD_R_XMM11,
116 UD_R_XMM12, UD_R_XMM13, UD_R_XMM14, UD_R_XMM15,
119 UD_R_YMM0, UD_R_YMM1, UD_R_YMM2, UD_R_YMM3,
120 UD_R_YMM4, UD_R_YMM5, UD_R_YMM6, UD_R_YMM7,
121 UD_R_YMM8, UD_R_YMM9, UD_R_YMM10, UD_R_YMM11,
122 UD_R_YMM12, UD_R_YMM13, UD_R_YMM14, UD_R_YMM15,
127 UD_OP_REG, UD_OP_MEM, UD_OP_PTR, UD_OP_IMM,
128 UD_OP_JIMM, UD_OP_CONST
176 int (*inp_hook) (
struct ud*);
177#ifndef __UD_STANDALONE__
180 const uint8_t* inp_buf;
182 size_t inp_buf_index;
185 uint8_t inp_sess[64];
189 void (*translator)(
struct ud*);
190 uint64_t insn_offset;
191 char insn_hexcode[64];
199 char asm_buf_int[128];
204 const char* (*sym_resolver)(
struct ud*, uint64_t addr, int64_t *offset);
209 enum ud_mnemonic_code mnemonic;
228 uint8_t modrm_offset;
232 uint8_t primary_opcode;
233 void * user_opaque_data;
242typedef enum ud_type ud_type_t;
243typedef enum ud_mnemonic_code ud_mnemonic_code_t;
245typedef struct ud ud_t;
248#define UD_SYN_INTEL ud_translate_intel
249#define UD_SYN_ATT ud_translate_att
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