hrev48284 adds 2 changesets to branch 'master' old head: 735ca4068d0912990c5f900dc021733d4842599c new head: 1aa19cd3ec09571c9baba0b83625231adcde07bb overview: http://cgit.haiku-os.org/haiku/log/?qt=range&q=1aa19cd+%5E735ca40 ---------------------------------------------------------------------------- a358634: Update udis86 to current version. 1aa19cd: KDL disassembler: implement symbol lookup The new udis makes it possible to hook a symbol lookup function, so we can get symbol names and offsets instead of raw addresses in call and jump instrucitons. [ Adrien Destugues <pulkomandy@xxxxxxxxx> ] ---------------------------------------------------------------------------- 17 files changed, 11224 insertions(+), 6206 deletions(-) headers/libs/udis86/libudis86/decode.h | 276 +- headers/libs/udis86/libudis86/extern.h | 66 +- headers/libs/udis86/libudis86/itab.h | 1379 +- headers/libs/udis86/libudis86/syn.h | 56 +- headers/libs/udis86/libudis86/types.h | 328 +- headers/libs/udis86/libudis86/udint.h | 89 + headers/libs/udis86/udis86.h | 29 +- src/add-ons/kernel/debugger/disasm/x86/Jamfile | 1 - .../kernel/debugger/disasm/x86/disasm_arch.cpp | 27 + src/libs/udis86/Jamfile | 1 - src/libs/udis86/decode.c | 1794 ++- src/libs/udis86/input.c | 226 - src/libs/udis86/itab.c | 11897 ++++++++++++----- src/libs/udis86/syn-att.c | 303 +- src/libs/udis86/syn-intel.c | 319 +- src/libs/udis86/syn.c | 244 +- src/libs/udis86/udis86.c | 395 +- ############################################################################ Commit: a358634d15862017675f54bfd8fdd580350b8955 URL: http://cgit.haiku-os.org/haiku/commit/?id=a358634 Author: Adrien Destugues <pulkomandy@xxxxxxxxx> Date: Wed Nov 12 10:25:41 2014 UTC Update udis86 to current version. ---------------------------------------------------------------------------- diff --git a/headers/libs/udis86/libudis86/decode.h b/headers/libs/udis86/libudis86/decode.h index 3d62096..a7362c8 100644 --- a/headers/libs/udis86/libudis86/decode.h +++ b/headers/libs/udis86/libudis86/decode.h @@ -1,33 +1,46 @@ +/* udis86 - libudis86/decode.h + * + * Copyright (c) 2002-2009 Vivek Thampi + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ #ifndef UD_DECODE_H #define UD_DECODE_H -#define MAX_INSN_LENGTH 15 +#include "types.h" +#include "itab.h" -/* register classes */ -#define T_NONE 0 -#define T_GPR 1 -#define T_MMX 2 -#define T_CRG 3 -#define T_DBG 4 -#define T_SEG 5 -#define T_XMM 6 +#define MAX_INSN_LENGTH 15 /* itab prefix bits */ #define P_none ( 0 ) -#define P_c1 ( 1 << 0 ) -#define P_C1(n) ( ( n >> 0 ) & 1 ) +#define P_cast ( 1 << 0 ) +#define P_CAST(n) ( ( n >> 0 ) & 1 ) #define P_rexb ( 1 << 1 ) #define P_REXB(n) ( ( n >> 1 ) & 1 ) -#define P_depM ( 1 << 2 ) -#define P_DEPM(n) ( ( n >> 2 ) & 1 ) -#define P_c3 ( 1 << 3 ) -#define P_C3(n) ( ( n >> 3 ) & 1 ) #define P_inv64 ( 1 << 4 ) #define P_INV64(n) ( ( n >> 4 ) & 1 ) #define P_rexw ( 1 << 5 ) #define P_REXW(n) ( ( n >> 5 ) & 1 ) -#define P_c2 ( 1 << 6 ) -#define P_C2(n) ( ( n >> 6 ) & 1 ) #define P_def64 ( 1 << 7 ) #define P_DEF64(n) ( ( n >> 7 ) & 1 ) #define P_rexr ( 1 << 8 ) @@ -40,27 +53,12 @@ #define P_REXX(n) ( ( n >> 11 ) & 1 ) #define P_ImpAddr ( 1 << 12 ) #define P_IMPADDR(n) ( ( n >> 12 ) & 1 ) - -/* rex prefix bits */ -#define REX_W(r) ( ( 0xF & ( r ) ) >> 3 ) -#define REX_R(r) ( ( 0x7 & ( r ) ) >> 2 ) -#define REX_X(r) ( ( 0x3 & ( r ) ) >> 1 ) -#define REX_B(r) ( ( 0x1 & ( r ) ) >> 0 ) -#define REX_PFX_MASK(n) ( ( P_REXW(n) << 3 ) | \ - ( P_REXR(n) << 2 ) | \ - ( P_REXX(n) << 1 ) | \ - ( P_REXB(n) << 0 ) ) - -/* scable-index-base bits */ -#define SIB_S(b) ( ( b ) >> 6 ) -#define SIB_I(b) ( ( ( b ) >> 3 ) & 7 ) -#define SIB_B(b) ( ( b ) & 7 ) - -/* modrm bits */ -#define MODRM_REG(b) ( ( ( b ) >> 3 ) & 7 ) -#define MODRM_NNN(b) ( ( ( b ) >> 3 ) & 7 ) -#define MODRM_MOD(b) ( ( ( b ) >> 6 ) & 3 ) -#define MODRM_RM(b) ( ( b ) & 7 ) +#define P_seg ( 1 << 13 ) +#define P_SEG(n) ( ( n >> 13 ) & 1 ) +#define P_str ( 1 << 14 ) +#define P_STR(n) ( ( n >> 14 ) & 1 ) +#define P_strz ( 1 << 15 ) +#define P_STR_ZF(n) ( ( n >> 15 ) & 1 ) /* operand type constants -- order is important! */ @@ -68,25 +66,15 @@ enum ud_operand_code { OP_NONE, OP_A, OP_E, OP_M, OP_G, - OP_I, - - OP_AL, OP_CL, OP_DL, OP_BL, - OP_AH, OP_CH, OP_DH, OP_BH, - - OP_ALr8b, OP_CLr9b, OP_DLr10b, OP_BLr11b, - OP_AHr12b, OP_CHr13b, OP_DHr14b, OP_BHr15b, + OP_I, OP_F, - OP_AX, OP_CX, OP_DX, OP_BX, - OP_SI, OP_DI, OP_SP, OP_BP, + OP_R0, OP_R1, OP_R2, OP_R3, + OP_R4, OP_R5, OP_R6, OP_R7, - OP_rAX, OP_rCX, OP_rDX, OP_rBX, - OP_rSP, OP_rBP, OP_rSI, OP_rDI, - - OP_rAXr8, OP_rCXr9, OP_rDXr10, OP_rBXr11, - OP_rSPr12, OP_rBPr13, OP_rSIr14, OP_rDIr15, - - OP_eAX, OP_eCX, OP_eDX, OP_eBX, - OP_eSP, OP_eBP, OP_eSI, OP_eDI, + OP_AL, OP_CL, OP_DL, + OP_AX, OP_CX, OP_DX, + OP_eAX, OP_eCX, OP_eDX, + OP_rAX, OP_rCX, OP_rDX, OP_ES, OP_CS, OP_SS, OP_DS, OP_FS, OP_GS, @@ -95,12 +83,15 @@ enum ud_operand_code { OP_ST4, OP_ST5, OP_ST6, OP_ST7, OP_J, OP_S, OP_O, - OP_I1, OP_I3, + OP_I1, OP_I3, OP_sI, OP_V, OP_W, OP_Q, OP_P, + OP_U, OP_N, OP_MU, - OP_R, OP_C, OP_D, OP_VR, OP_PR -}; + OP_R, OP_C, OP_D, + + OP_MR +} UD_ATTR_PACKED; /* operand size constants */ @@ -109,10 +100,6 @@ enum ud_operand_size { SZ_NA = 0, SZ_Z = 1, SZ_V = 2, - SZ_P = 3, - SZ_WP = 4, - SZ_DP = 5, - SZ_MDQ = 6, SZ_RDQ = 7, /* the following values are used as is, @@ -124,123 +111,41 @@ enum ud_operand_size { SZ_D = 32, SZ_Q = 64, SZ_T = 80, -}; + SZ_O = 128, + + SZ_Y = 17, -/* itab entry operand definitions */ - -#define O_rSPr12 { OP_rSPr12, SZ_NA } -#define O_BL { OP_BL, SZ_NA } -#define O_BH { OP_BH, SZ_NA } -#define O_BP { OP_BP, SZ_NA } -#define O_AHr12b { OP_AHr12b, SZ_NA } -#define O_BX { OP_BX, SZ_NA } -#define O_Jz { OP_J, SZ_Z } -#define O_Jv { OP_J, SZ_V } -#define O_Jb { OP_J, SZ_B } -#define O_rSIr14 { OP_rSIr14, SZ_NA } -#define O_GS { OP_GS, SZ_NA } -#define O_D { OP_D, SZ_NA } -#define O_rBPr13 { OP_rBPr13, SZ_NA } -#define O_Ob { OP_O, SZ_B } -#define O_P { OP_P, SZ_NA } -#define O_Ow { OP_O, SZ_W } -#define O_Ov { OP_O, SZ_V } -#define O_Gw { OP_G, SZ_W } -#define O_Gv { OP_G, SZ_V } -#define O_rDX { OP_rDX, SZ_NA } -#define O_Gx { OP_G, SZ_MDQ } -#define O_Gd { OP_G, SZ_D } -#define O_Gb { OP_G, SZ_B } -#define O_rBXr11 { OP_rBXr11, SZ_NA } -#define O_rDI { OP_rDI, SZ_NA } -#define O_rSI { OP_rSI, SZ_NA } -#define O_ALr8b { OP_ALr8b, SZ_NA } -#define O_eDI { OP_eDI, SZ_NA } -#define O_Gz { OP_G, SZ_Z } -#define O_eDX { OP_eDX, SZ_NA } -#define O_DHr14b { OP_DHr14b, SZ_NA } -#define O_rSP { OP_rSP, SZ_NA } -#define O_PR { OP_PR, SZ_NA } -#define O_NONE { OP_NONE, SZ_NA } -#define O_rCX { OP_rCX, SZ_NA } -#define O_jWP { OP_J, SZ_WP } -#define O_rDXr10 { OP_rDXr10, SZ_NA } -#define O_Md { OP_M, SZ_D } -#define O_C { OP_C, SZ_NA } -#define O_G { OP_G, SZ_NA } -#define O_Mb { OP_M, SZ_B } -#define O_Mt { OP_M, SZ_T } -#define O_S { OP_S, SZ_NA } -#define O_Mq { OP_M, SZ_Q } -#define O_W { OP_W, SZ_NA } -#define O_ES { OP_ES, SZ_NA } -#define O_rBX { OP_rBX, SZ_NA } -#define O_Ed { OP_E, SZ_D } -#define O_DLr10b { OP_DLr10b, SZ_NA } -#define O_Mw { OP_M, SZ_W } -#define O_Eb { OP_E, SZ_B } -#define O_Ex { OP_E, SZ_MDQ } -#define O_Ez { OP_E, SZ_Z } -#define O_Ew { OP_E, SZ_W } -#define O_Ev { OP_E, SZ_V } -#define O_Ep { OP_E, SZ_P } -#define O_FS { OP_FS, SZ_NA } -#define O_Ms { OP_M, SZ_W } -#define O_rAXr8 { OP_rAXr8, SZ_NA } -#define O_eBP { OP_eBP, SZ_NA } -#define O_Isb { OP_I, SZ_SB } -#define O_eBX { OP_eBX, SZ_NA } -#define O_rCXr9 { OP_rCXr9, SZ_NA } -#define O_jDP { OP_J, SZ_DP } -#define O_CH { OP_CH, SZ_NA } -#define O_CL { OP_CL, SZ_NA } -#define O_R { OP_R, SZ_RDQ } -#define O_V { OP_V, SZ_NA } -#define O_CS { OP_CS, SZ_NA } -#define O_CHr13b { OP_CHr13b, SZ_NA } -#define O_eCX { OP_eCX, SZ_NA } -#define O_eSP { OP_eSP, SZ_NA } -#define O_SS { OP_SS, SZ_NA } -#define O_SP { OP_SP, SZ_NA } -#define O_BLr11b { OP_BLr11b, SZ_NA } -#define O_SI { OP_SI, SZ_NA } -#define O_eSI { OP_eSI, SZ_NA } -#define O_DL { OP_DL, SZ_NA } -#define O_DH { OP_DH, SZ_NA } -#define O_DI { OP_DI, SZ_NA } -#define O_DX { OP_DX, SZ_NA } -#define O_rBP { OP_rBP, SZ_NA } -#define O_Gvw { OP_G, SZ_MDQ } -#define O_I1 { OP_I1, SZ_NA } -#define O_I3 { OP_I3, SZ_NA } -#define O_DS { OP_DS, SZ_NA } -#define O_ST4 { OP_ST4, SZ_NA } -#define O_ST5 { OP_ST5, SZ_NA } -#define O_ST6 { OP_ST6, SZ_NA } -#define O_ST7 { OP_ST7, SZ_NA } -#define O_ST0 { OP_ST0, SZ_NA } -#define O_ST1 { OP_ST1, SZ_NA } -#define O_ST2 { OP_ST2, SZ_NA } -#define O_ST3 { OP_ST3, SZ_NA } -#define O_E { OP_E, SZ_NA } -#define O_AH { OP_AH, SZ_NA } -#define O_M { OP_M, SZ_NA } -#define O_AL { OP_AL, SZ_NA } -#define O_CLr9b { OP_CLr9b, SZ_NA } -#define O_Q { OP_Q, SZ_NA } -#define O_eAX { OP_eAX, SZ_NA } -#define O_VR { OP_VR, SZ_NA } -#define O_AX { OP_AX, SZ_NA } -#define O_rAX { OP_rAX, SZ_NA } -#define O_Iz { OP_I, SZ_Z } -#define O_rDIr15 { OP_rDIr15, SZ_NA } -#define O_Iw { OP_I, SZ_W } -#define O_Iv { OP_I, SZ_V } -#define O_Ap { OP_A, SZ_P } -#define O_CX { OP_CX, SZ_NA } -#define O_Ib { OP_I, SZ_B } -#define O_BHr15b { OP_BHr15b, SZ_NA } + /* + * complex size types, that encode sizes for operands + * of type MR (memory or register), for internal use + * only. Id space 256 and above. + */ + SZ_BD = (SZ_B << 8) | SZ_D, + SZ_BV = (SZ_B << 8) | SZ_V, + SZ_WD = (SZ_W << 8) | SZ_D, + SZ_WV = (SZ_W << 8) | SZ_V, + SZ_WY = (SZ_W << 8) | SZ_Y, + SZ_DY = (SZ_D << 8) | SZ_Y, + SZ_WO = (SZ_W << 8) | SZ_O, + SZ_DO = (SZ_D << 8) | SZ_O, + SZ_QO = (SZ_Q << 8) | SZ_O, + +} UD_ATTR_PACKED; + + +/* resolve complex size type. + */ +static inline enum ud_operand_size +Mx_mem_size(enum ud_operand_size size) +{ + return (size >> 8) & 0xff; +} +static inline enum ud_operand_size +Mx_reg_size(enum ud_operand_size size) +{ + return size & 0xff; +} /* A single operand of an entry in the instruction table. * (internal use only) @@ -264,7 +169,22 @@ struct ud_itab_entry uint32_t prefix; }; -extern const char * ud_lookup_mnemonic( enum ud_mnemonic_code c ); +struct ud_lookup_table_list_entry { + const uint16_t *table; + enum ud_table_type type; + const char *meta; +}; + + + +static inline int +ud_opcode_field_sext(uint8_t primary_opcode) +{ + return (primary_opcode & 0x02) != 0; +} + +extern struct ud_itab_entry ud_itab[]; +extern struct ud_lookup_table_list_entry ud_lookup_table_list[]; #endif /* UD_DECODE_H */ diff --git a/headers/libs/udis86/libudis86/extern.h b/headers/libs/udis86/libudis86/extern.h index c33baf5..ae9f82f 100644 --- a/headers/libs/udis86/libudis86/extern.h +++ b/headers/libs/udis86/libudis86/extern.h @@ -1,9 +1,27 @@ -/* ----------------------------------------------------------------------------- - * extern.h +/* udis86 - libudis86/extern.h * - * Copyright (c) 2004, 2005, 2006, Vivek Mohan <vivek@xxxxxxxx> - * All rights reserved. See LICENSE - * ----------------------------------------------------------------------------- + * Copyright (c) 2002-2009, 2013 Vivek Thampi + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef UD_EXTERN_H #define UD_EXTERN_H @@ -12,7 +30,6 @@ extern "C" { #endif -#include <stdio.h> #include "types.h" /* ============================= PUBLIC API ================================= */ @@ -25,7 +42,7 @@ extern void ud_set_pc(struct ud*, uint64_t); extern void ud_set_input_hook(struct ud*, int (*)(struct ud*)); -extern void ud_set_input_buffer(struct ud*, uint8_t*, size_t); +extern void ud_set_input_buffer(struct ud*, const uint8_t*, size_t); #ifndef __UD_STANDALONE__ extern void ud_set_input_file(struct ud*, FILE*); @@ -37,7 +54,7 @@ extern void ud_set_syntax(struct ud*, void (*)(struct ud*)); extern void ud_input_skip(struct ud*, size_t); -extern int ud_input_end(struct ud*); +extern int ud_input_end(const struct ud*); extern unsigned int ud_decode(struct ud*); @@ -47,21 +64,42 @@ extern void ud_translate_intel(struct ud*); extern void ud_translate_att(struct ud*); -extern char* ud_insn_asm(struct ud* u); +extern const char* ud_insn_asm(const struct ud* u); -extern uint8_t* ud_insn_ptr(struct ud* u); +extern const uint8_t* ud_insn_ptr(const struct ud* u); -extern uint64_t ud_insn_off(struct ud*); +extern uint64_t ud_insn_off(const struct ud*); -extern char* ud_insn_hex(struct ud*); +extern const char* ud_insn_hex(struct ud*); -extern unsigned int ud_insn_len(struct ud* u); +extern unsigned int ud_insn_len(const struct ud* u); + +extern const struct ud_operand* ud_insn_opr(const struct ud *u, unsigned int n); + +extern int ud_opr_is_sreg(const struct ud_operand *opr); + +extern int ud_opr_is_gpr(const struct ud_operand *opr); + +extern enum ud_mnemonic_code ud_insn_mnemonic(const struct ud *u); extern const char* ud_lookup_mnemonic(enum ud_mnemonic_code c); +extern void ud_set_user_opaque_data(struct ud*, void*); + +extern void* ud_get_user_opaque_data(const struct ud*); + +extern uint64_t ud_insn_sext_imm(const struct ud*, const struct ud_operand*); + +extern void ud_set_asm_buffer(struct ud *u, char *buf, size_t size); + +extern void ud_set_sym_resolver(struct ud *u, + const char* (*resolver)(struct ud*, + uint64_t addr, + int64_t *offset)); + /* ========================================================================== */ #ifdef __cplusplus } #endif -#endif +#endif /* UD_EXTERN_H */ diff --git a/headers/libs/udis86/libudis86/itab.h b/headers/libs/udis86/libudis86/itab.h index 737112c..778a76d 100644 --- a/headers/libs/udis86/libudis86/itab.h +++ b/headers/libs/udis86/libudis86/itab.h @@ -1,719 +1,678 @@ - -/* itab.h -- auto generated by opgen.py, do not edit. */ - #ifndef UD_ITAB_H #define UD_ITAB_H +/* itab.h -- generated by udis86:scripts/ud_itab.py, do no edit */ - -enum ud_itab_vendor_index { - ITAB__VENDOR_INDX__AMD, - ITAB__VENDOR_INDX__INTEL, -}; - - -enum ud_itab_mode_index { - ITAB__MODE_INDX__16, - ITAB__MODE_INDX__32, - ITAB__MODE_INDX__64 -}; - - -enum ud_itab_mod_index { - ITAB__MOD_INDX__NOT_11, - ITAB__MOD_INDX__11 -}; - - -enum ud_itab_index { - ITAB__0F, - ITAB__0F__OP_00__REG, - ITAB__0F__OP_01__REG, - ITAB__0F__OP_01__REG__OP_00__MOD, - ITAB__0F__OP_01__REG__OP_00__MOD__OP_01__RM, - ITAB__0F__OP_01__REG__OP_00__MOD__OP_01__RM__OP_01__VENDOR, - ITAB__0F__OP_01__REG__OP_00__MOD__OP_01__RM__OP_03__VENDOR, - ITAB__0F__OP_01__REG__OP_00__MOD__OP_01__RM__OP_04__VENDOR, - ITAB__0F__OP_01__REG__OP_01__MOD, - ITAB__0F__OP_01__REG__OP_01__MOD__OP_01__RM, - ITAB__0F__OP_01__REG__OP_02__MOD, - ITAB__0F__OP_01__REG__OP_03__MOD, - ITAB__0F__OP_01__REG__OP_03__MOD__OP_01__RM, - ITAB__0F__OP_01__REG__OP_03__MOD__OP_01__RM__OP_00__VENDOR, - ITAB__0F__OP_01__REG__OP_03__MOD__OP_01__RM__OP_01__VENDOR, - ITAB__0F__OP_01__REG__OP_03__MOD__OP_01__RM__OP_02__VENDOR, - ITAB__0F__OP_01__REG__OP_03__MOD__OP_01__RM__OP_03__VENDOR, - ITAB__0F__OP_01__REG__OP_03__MOD__OP_01__RM__OP_04__VENDOR, - ITAB__0F__OP_01__REG__OP_03__MOD__OP_01__RM__OP_05__VENDOR, - ITAB__0F__OP_01__REG__OP_03__MOD__OP_01__RM__OP_06__VENDOR, - ITAB__0F__OP_01__REG__OP_03__MOD__OP_01__RM__OP_07__VENDOR, - ITAB__0F__OP_01__REG__OP_04__MOD, - ITAB__0F__OP_01__REG__OP_06__MOD, - ITAB__0F__OP_01__REG__OP_07__MOD, - ITAB__0F__OP_01__REG__OP_07__MOD__OP_01__RM, - ITAB__0F__OP_01__REG__OP_07__MOD__OP_01__RM__OP_01__VENDOR, - ITAB__0F__OP_0D__REG, - ITAB__0F__OP_18__REG, - ITAB__0F__OP_71__REG, - ITAB__0F__OP_72__REG, - ITAB__0F__OP_73__REG, - ITAB__0F__OP_AE__REG, - ITAB__0F__OP_AE__REG__OP_05__MOD, - ITAB__0F__OP_AE__REG__OP_05__MOD__OP_01__RM, - ITAB__0F__OP_AE__REG__OP_06__MOD, - ITAB__0F__OP_AE__REG__OP_06__MOD__OP_01__RM, - ITAB__0F__OP_AE__REG__OP_07__MOD, - ITAB__0F__OP_AE__REG__OP_07__MOD__OP_01__RM, - ITAB__0F__OP_BA__REG, - ITAB__0F__OP_C7__REG, - ITAB__0F__OP_C7__REG__OP_00__VENDOR, - ITAB__0F__OP_C7__REG__OP_07__VENDOR, - ITAB__0F__OP_D9__MOD, - ITAB__0F__OP_D9__MOD__OP_01__X87, - ITAB__1BYTE, - ITAB__1BYTE__OP_60__OSIZE, - ITAB__1BYTE__OP_61__OSIZE, - ITAB__1BYTE__OP_63__MODE, - ITAB__1BYTE__OP_6D__OSIZE, - ITAB__1BYTE__OP_6F__OSIZE, - ITAB__1BYTE__OP_80__REG, - ITAB__1BYTE__OP_81__REG, - ITAB__1BYTE__OP_82__REG, - ITAB__1BYTE__OP_83__REG, - ITAB__1BYTE__OP_8F__REG, - ITAB__1BYTE__OP_98__OSIZE, - ITAB__1BYTE__OP_99__OSIZE, - ITAB__1BYTE__OP_9C__MODE, - ITAB__1BYTE__OP_9C__MODE__OP_00__OSIZE, - ITAB__1BYTE__OP_9C__MODE__OP_01__OSIZE, - ITAB__1BYTE__OP_9D__MODE, - ITAB__1BYTE__OP_9D__MODE__OP_00__OSIZE, - ITAB__1BYTE__OP_9D__MODE__OP_01__OSIZE, - ITAB__1BYTE__OP_A5__OSIZE, - ITAB__1BYTE__OP_A7__OSIZE, - ITAB__1BYTE__OP_AB__OSIZE, - ITAB__1BYTE__OP_AD__OSIZE, - ITAB__1BYTE__OP_AE__MOD, - ITAB__1BYTE__OP_AE__MOD__OP_00__REG, - ITAB__1BYTE__OP_AF__OSIZE, - ITAB__1BYTE__OP_C0__REG, - ITAB__1BYTE__OP_C1__REG, - ITAB__1BYTE__OP_C6__REG, - ITAB__1BYTE__OP_C7__REG, - ITAB__1BYTE__OP_CF__OSIZE, - ITAB__1BYTE__OP_D0__REG, - ITAB__1BYTE__OP_D1__REG, - ITAB__1BYTE__OP_D2__REG, - ITAB__1BYTE__OP_D3__REG, - ITAB__1BYTE__OP_D8__MOD, - ITAB__1BYTE__OP_D8__MOD__OP_00__REG, - ITAB__1BYTE__OP_D8__MOD__OP_01__X87, - ITAB__1BYTE__OP_D9__MOD, - ITAB__1BYTE__OP_D9__MOD__OP_00__REG, - ITAB__1BYTE__OP_D9__MOD__OP_01__X87, - ITAB__1BYTE__OP_DA__MOD, - ITAB__1BYTE__OP_DA__MOD__OP_00__REG, - ITAB__1BYTE__OP_DA__MOD__OP_01__X87, - ITAB__1BYTE__OP_DB__MOD, - ITAB__1BYTE__OP_DB__MOD__OP_00__REG, - ITAB__1BYTE__OP_DB__MOD__OP_01__X87, - ITAB__1BYTE__OP_DC__MOD, - ITAB__1BYTE__OP_DC__MOD__OP_00__REG, - ITAB__1BYTE__OP_DC__MOD__OP_01__X87, - ITAB__1BYTE__OP_DD__MOD, - ITAB__1BYTE__OP_DD__MOD__OP_00__REG, - ITAB__1BYTE__OP_DD__MOD__OP_01__X87, - ITAB__1BYTE__OP_DE__MOD, - ITAB__1BYTE__OP_DE__MOD__OP_00__REG, - ITAB__1BYTE__OP_DE__MOD__OP_01__X87, - ITAB__1BYTE__OP_DF__MOD, - ITAB__1BYTE__OP_DF__MOD__OP_00__REG, - ITAB__1BYTE__OP_DF__MOD__OP_01__X87, - ITAB__1BYTE__OP_E3__ASIZE, - ITAB__1BYTE__OP_F6__REG, - ITAB__1BYTE__OP_F7__REG, - ITAB__1BYTE__OP_FE__REG, - ITAB__1BYTE__OP_FF__REG, - ITAB__3DNOW, - ITAB__PFX_SSE66__0F, - ITAB__PFX_SSE66__0F__OP_71__REG, - ITAB__PFX_SSE66__0F__OP_72__REG, - ITAB__PFX_SSE66__0F__OP_73__REG, - ITAB__PFX_SSE66__0F__OP_C7__REG, - ITAB__PFX_SSE66__0F__OP_C7__REG__OP_00__VENDOR, - ITAB__PFX_SSEF2__0F, - ITAB__PFX_SSEF3__0F, - ITAB__PFX_SSEF3__0F__OP_C7__REG, - ITAB__PFX_SSEF3__0F__OP_C7__REG__OP_07__VENDOR, +/* ud_table_type -- lookup table types (see decode.c) */ +enum ud_table_type { + UD_TAB__OPC_TABLE, + UD_TAB__OPC_X87, + UD_TAB__OPC_MOD, + UD_TAB__OPC_VEX_M, + UD_TAB__OPC_VEX_P, + UD_TAB__OPC_RM, + UD_TAB__OPC_VENDOR, + UD_TAB__OPC_OSIZE, + UD_TAB__OPC_MODE, + UD_TAB__OPC_3DNOW, + UD_TAB__OPC_REG, + UD_TAB__OPC_ASIZE, + UD_TAB__OPC_SSE }; - +/* ud_mnemonic -- mnemonic constants */ enum ud_mnemonic_code { - UD_I3dnow, - UD_Iaaa, - UD_Iaad, - UD_Iaam, - UD_Iaas, - UD_Iadc, - UD_Iadd, - UD_Iaddpd, - UD_Iaddps, - UD_Iaddsd, - UD_Iaddss, - UD_Iaddsubpd, - UD_Iaddsubps, - UD_Iand, - UD_Iandpd, - UD_Iandps, - UD_Iandnpd, - UD_Iandnps, - UD_Iarpl, - UD_Imovsxd, - UD_Ibound, - UD_Ibsf, - UD_Ibsr, - UD_Ibswap, - UD_Ibt, - UD_Ibtc, - UD_Ibtr, - UD_Ibts, - UD_Icall, - UD_Icbw, - UD_Icwde, - UD_Icdqe, - UD_Iclc, - UD_Icld, - UD_Iclflush, - UD_Iclgi, - UD_Icli, - UD_Iclts, - UD_Icmc, - UD_Icmovo, - UD_Icmovno, - UD_Icmovb, - UD_Icmovae, - UD_Icmovz, - UD_Icmovnz, - UD_Icmovbe, - UD_Icmova, - UD_Icmovs, - UD_Icmovns, - UD_Icmovp, - UD_Icmovnp, - UD_Icmovl, - UD_Icmovge, - UD_Icmovle, - UD_Icmovg, - UD_Icmp, - UD_Icmppd, - UD_Icmpps, - UD_Icmpsb, - UD_Icmpsw, - UD_Icmpsd, - UD_Icmpsq, - UD_Icmpss, - UD_Icmpxchg, - UD_Icmpxchg8b, - UD_Icomisd, - UD_Icomiss, - UD_Icpuid, - UD_Icvtdq2pd, - UD_Icvtdq2ps, - UD_Icvtpd2dq, - UD_Icvtpd2pi, - UD_Icvtpd2ps, - UD_Icvtpi2ps, - UD_Icvtpi2pd, - UD_Icvtps2dq, - UD_Icvtps2pi, - UD_Icvtps2pd, - UD_Icvtsd2si, - UD_Icvtsd2ss, - UD_Icvtsi2ss, - UD_Icvtss2si, - UD_Icvtss2sd, - UD_Icvttpd2pi, - UD_Icvttpd2dq, - UD_Icvttps2dq, - UD_Icvttps2pi, - UD_Icvttsd2si, - UD_Icvtsi2sd, - UD_Icvttss2si, - UD_Icwd, - UD_Icdq, - UD_Icqo, - UD_Idaa, - UD_Idas, - UD_Idec, - UD_Idiv, - UD_Idivpd, - UD_Idivps, - UD_Idivsd, - UD_Idivss, - UD_Iemms, - UD_Ienter, - UD_If2xm1, - UD_Ifabs, - UD_Ifadd, - UD_Ifaddp, - UD_Ifbld, - UD_Ifbstp, - UD_Ifchs, - UD_Ifclex, - UD_Ifcmovb, - UD_Ifcmove, - UD_Ifcmovbe, - UD_Ifcmovu, - UD_Ifcmovnb, - UD_Ifcmovne, - UD_Ifcmovnbe, - UD_Ifcmovnu, - UD_Ifucomi, - UD_Ifcom, - UD_Ifcom2, - UD_Ifcomp3, - UD_Ifcomi, - UD_Ifucomip, - UD_Ifcomip, - UD_Ifcomp, - UD_Ifcomp5, - UD_Ifcompp, - UD_Ifcos, - UD_Ifdecstp, - UD_Ifdiv, - UD_Ifdivp, - UD_Ifdivr, - UD_Ifdivrp, - UD_Ifemms, - UD_Iffree, - UD_Iffreep, - UD_Ificom, - UD_Ificomp, - UD_Ifild, - UD_Ifncstp, - UD_Ifninit, - UD_Ifiadd, - UD_Ifidivr, - UD_Ifidiv, - UD_Ifisub, - UD_Ifisubr, - UD_Ifist, - UD_Ifistp, - UD_Ifisttp, - UD_Ifld, - UD_Ifld1, - UD_Ifldl2t, - UD_Ifldl2e, - UD_Ifldlpi, - UD_Ifldlg2, - UD_Ifldln2, - UD_Ifldz, - UD_Ifldcw, - UD_Ifldenv, - UD_Ifmul, - UD_Ifmulp, - UD_Ifimul, - UD_Ifnop, - UD_Ifpatan, - UD_Ifprem, - UD_Ifprem1, - UD_Ifptan, - UD_Ifrndint, - UD_Ifrstor, - UD_Ifnsave, - UD_Ifscale, - UD_Ifsin, - UD_Ifsincos, - UD_Ifsqrt, - UD_Ifstp, - UD_Ifstp1, - UD_Ifstp8, - UD_Ifstp9, - UD_Ifst, - UD_Ifnstcw, - UD_Ifnstenv, - UD_Ifnstsw, - UD_Ifsub, - UD_Ifsubp, - UD_Ifsubr, - UD_Ifsubrp, - UD_Iftst, - UD_Ifucom, - UD_Ifucomp, - UD_Ifucompp, - UD_Ifxam, - UD_Ifxch, - UD_Ifxch4, - UD_Ifxch7, - UD_Ifxrstor, - UD_Ifxsave, - UD_Ifpxtract, - UD_Ifyl2x, - UD_Ifyl2xp1, - UD_Ihaddpd, - UD_Ihaddps, - UD_Ihlt, - UD_Ihsubpd, - UD_Ihsubps, - UD_Iidiv, - UD_Iin, - UD_Iimul, - UD_Iinc, - UD_Iinsb, - UD_Iinsw, - UD_Iinsd, - UD_Iint1, - UD_Iint3, - UD_Iint, - UD_Iinto, - UD_Iinvd, - UD_Iinvlpg, - UD_Iinvlpga, - UD_Iiretw, - UD_Iiretd, - UD_Iiretq, - UD_Ijo, - UD_Ijno, - UD_Ijb, - UD_Ijae, - UD_Ijz, - UD_Ijnz, - UD_Ijbe, - UD_Ija, - UD_Ijs, - UD_Ijns, - UD_Ijp, - UD_Ijnp, - UD_Ijl, - UD_Ijge, - UD_Ijle, - UD_Ijg, - UD_Ijcxz, - UD_Ijecxz, - UD_Ijrcxz, - UD_Ijmp, - UD_Ilahf, - UD_Ilar, - UD_Ilddqu, - UD_Ildmxcsr, - UD_Ilds, - UD_Ilea, - UD_Iles, - UD_Ilfs, - UD_Ilgs, - UD_Ilidt, - UD_Ilss, - UD_Ileave, - UD_Ilfence, - UD_Ilgdt, - UD_Illdt, - UD_Ilmsw, - UD_Ilock, - UD_Ilodsb, - UD_Ilodsw, - UD_Ilodsd, - UD_Ilodsq, - UD_Iloopnz, - UD_Iloope, - UD_Iloop, - UD_Ilsl, - UD_Iltr, - UD_Imaskmovq, - UD_Imaxpd, - UD_Imaxps, - UD_Imaxsd, - UD_Imaxss, - UD_Imfence, - UD_Iminpd, - UD_Iminps, - UD_Iminsd, - UD_Iminss, - UD_Imonitor, - UD_Imov, - UD_Imovapd, - UD_Imovaps, - UD_Imovd, - UD_Imovddup, - UD_Imovdqa, - UD_Imovdqu, - UD_Imovdq2q, - UD_Imovhpd, - UD_Imovhps, - UD_Imovlhps, - UD_Imovlpd, - UD_Imovlps, - UD_Imovhlps, - UD_Imovmskpd, - UD_Imovmskps, - UD_Imovntdq, - UD_Imovnti, - UD_Imovntpd, - UD_Imovntps, - UD_Imovntq, - UD_Imovq, - UD_Imovqa, - UD_Imovq2dq, - UD_Imovsb, - UD_Imovsw, - UD_Imovsd, - UD_Imovsq, - UD_Imovsldup, - UD_Imovshdup, - UD_Imovss, - UD_Imovsx, - UD_Imovupd, - UD_Imovups, - UD_Imovzx, - UD_Imul, - UD_Imulpd, - UD_Imulps, - UD_Imulsd, - UD_Imulss, - UD_Imwait, - UD_Ineg, - UD_Inop, - UD_Inot, - UD_Ior, - UD_Iorpd, - UD_Iorps, - UD_Iout, - UD_Ioutsb, - UD_Ioutsw, - UD_Ioutsd, - UD_Ioutsq, - UD_Ipacksswb, - UD_Ipackssdw, - UD_Ipackuswb, - UD_Ipaddb, - UD_Ipaddw, - UD_Ipaddq, - UD_Ipaddsb, - UD_Ipaddsw, - UD_Ipaddusb, - UD_Ipaddusw, - UD_Ipand, - UD_Ipandn, - UD_Ipause, - UD_Ipavgb, - UD_Ipavgw, - UD_Ipcmpeqb, - UD_Ipcmpeqw, - UD_Ipcmpeqd, - UD_Ipcmpgtb, - UD_Ipcmpgtw, - UD_Ipcmpgtd, - UD_Ipextrw, - UD_Ipinsrw, - UD_Ipmaddwd, - UD_Ipmaxsw, - UD_Ipmaxub, - UD_Ipminsw, - UD_Ipminub, - UD_Ipmovmskb, - UD_Ipmulhuw, - UD_Ipmulhw, - UD_Ipmullw, - UD_Ipmuludq, - UD_Ipop, - UD_Ipopa, - UD_Ipopad, - UD_Ipopfw, - UD_Ipopfd, - UD_Ipopfq, - UD_Ipor, - UD_Iprefetch, - UD_Iprefetchnta, - UD_Iprefetcht0, - UD_Iprefetcht1, - UD_Iprefetcht2, - UD_Ipsadbw, - UD_Ipshufd, - UD_Ipshufhw, - UD_Ipshuflw, - UD_Ipshufw, - UD_Ipslldq, - UD_Ipsllw, - UD_Ipslld, - UD_Ipsllq, - UD_Ipsraw, - UD_Ipsrad, - UD_Ipsrlw, - UD_Ipsrld, - UD_Ipsrlq, - UD_Ipsrldq, - UD_Ipsubb, - UD_Ipsubw, - UD_Ipsubd, - UD_Ipsubq, - UD_Ipsubsb, - UD_Ipsubsw, - UD_Ipsubusb, - UD_Ipsubusw, - UD_Ipunpckhbw, - UD_Ipunpckhwd, - UD_Ipunpckhdq, - UD_Ipunpckhqdq, - UD_Ipunpcklbw, - UD_Ipunpcklwd, - UD_Ipunpckldq, - UD_Ipunpcklqdq, - UD_Ipi2fw, - UD_Ipi2fd, - UD_Ipf2iw, - UD_Ipf2id, - UD_Ipfnacc, - UD_Ipfpnacc, - UD_Ipfcmpge, - UD_Ipfmin, - UD_Ipfrcp, - UD_Ipfrsqrt, - UD_Ipfsub, - UD_Ipfadd, - UD_Ipfcmpgt, - UD_Ipfmax, - UD_Ipfrcpit1, - UD_Ipfrspit1, - UD_Ipfsubr, - UD_Ipfacc, - UD_Ipfcmpeq, - UD_Ipfmul, - UD_Ipfrcpit2, - UD_Ipmulhrw, - UD_Ipswapd, - UD_Ipavgusb, - UD_Ipush, - UD_Ipusha, - UD_Ipushad, - UD_Ipushfw, - UD_Ipushfd, - UD_Ipushfq, - UD_Ipxor, - UD_Ircl, - UD_Ircr, - UD_Irol, - UD_Iror, - UD_Ircpps, - UD_Ircpss, - UD_Irdmsr, - UD_Irdpmc, - UD_Irdtsc, - UD_Irdtscp, - UD_Irepne, - UD_Irep, - UD_Iret, - UD_Iretf, - UD_Irsm, - UD_Irsqrtps, - UD_Irsqrtss, - UD_Isahf, - UD_Isal, - UD_Isalc, - UD_Isar, - UD_Ishl, - UD_Ishr, - UD_Isbb, - UD_Iscasb, - UD_Iscasw, - UD_Iscasd, - UD_Iscasq, - UD_Iseto, - UD_Isetno, - UD_Isetb, - UD_Isetnb, - UD_Isetz, - UD_Isetnz, - UD_Isetbe, - UD_Iseta, - UD_Isets, - UD_Isetns, - UD_Isetp, - UD_Isetnp, - UD_Isetl, - UD_Isetge, - UD_Isetle, - UD_Isetg, - UD_Isfence, - UD_Isgdt, - UD_Ishld, - UD_Ishrd, - UD_Ishufpd, - UD_Ishufps, - UD_Isidt, - UD_Isldt, - UD_Ismsw, - UD_Isqrtps, - UD_Isqrtpd, - UD_Isqrtsd, - UD_Isqrtss, - UD_Istc, - UD_Istd, - UD_Istgi, - UD_Isti, - UD_Iskinit, - UD_Istmxcsr, - UD_Istosb, - UD_Istosw, - UD_Istosd, - UD_Istosq, - UD_Istr, - UD_Isub, - UD_Isubpd, - UD_Isubps, - UD_Isubsd, - UD_Isubss, - UD_Iswapgs, - UD_Isyscall, - UD_Isysenter, - UD_Isysexit, - UD_Isysret, - UD_Itest, - UD_Iucomisd, - UD_Iucomiss, - UD_Iud2, - UD_Iunpckhpd, - UD_Iunpckhps, - UD_Iunpcklps, - UD_Iunpcklpd, - UD_Iverr, - UD_Iverw, - UD_Ivmcall, - UD_Ivmclear, - UD_Ivmxon, - UD_Ivmptrld, - UD_Ivmptrst, - UD_Ivmresume, - UD_Ivmxoff, - UD_Ivmrun, - UD_Ivmmcall, - UD_Ivmload, - UD_Ivmsave, - UD_Iwait, - UD_Iwbinvd, - UD_Iwrmsr, - UD_Ixadd, - UD_Ixchg, - UD_Ixlatb, - UD_Ixor, - UD_Ixorpd, - UD_Ixorps, - UD_Idb, - UD_Iinvalid, - UD_Id3vil, - UD_Ina, - UD_Igrp_reg, - UD_Igrp_rm, - UD_Igrp_vendor, - UD_Igrp_x87, - UD_Igrp_mode, - UD_Igrp_osize, - UD_Igrp_asize, - UD_Igrp_mod, - UD_Inone, -}; - - + UD_Iinvalid, + UD_I3dnow, + UD_Inone, + UD_Idb, + UD_Ipause, + UD_Iaaa, + UD_Iaad, + UD_Iaam, + UD_Iaas, + UD_Iadc, + UD_Iadd, + UD_Iaddpd, + UD_Iaddps, + UD_Iaddsd, + UD_Iaddss, + UD_Iand, + UD_Iandpd, + UD_Iandps, + UD_Iandnpd, + UD_Iandnps, + UD_Iarpl, + UD_Imovsxd, + UD_Ibound, + UD_Ibsf, + UD_Ibsr, + UD_Ibswap, + UD_Ibt, + UD_Ibtc, + UD_Ibtr, + UD_Ibts, + UD_Icall, + UD_Icbw, + UD_Icwde, + UD_Icdqe, + UD_Iclc, + UD_Icld, + UD_Iclflush, + UD_Iclgi, + UD_Icli, + UD_Iclts, + UD_Icmc, + UD_Icmovo, + UD_Icmovno, + UD_Icmovb, + UD_Icmovae, + UD_Icmovz, + UD_Icmovnz, + UD_Icmovbe, + UD_Icmova, + UD_Icmovs, + UD_Icmovns, + UD_Icmovp, + UD_Icmovnp, + UD_Icmovl, + UD_Icmovge, + UD_Icmovle, + UD_Icmovg, + UD_Icmp, + UD_Icmppd, + UD_Icmpps, + UD_Icmpsb, + UD_Icmpsw, + UD_Icmpsd, + UD_Icmpsq, + UD_Icmpss, + UD_Icmpxchg, + UD_Icmpxchg8b, + UD_Icmpxchg16b, + UD_Icomisd, + UD_Icomiss, + UD_Icpuid, + UD_Icvtdq2pd, + UD_Icvtdq2ps, + UD_Icvtpd2dq, + UD_Icvtpd2pi, + UD_Icvtpd2ps, + UD_Icvtpi2ps, + UD_Icvtpi2pd, + UD_Icvtps2dq, + UD_Icvtps2pi, + UD_Icvtps2pd, + UD_Icvtsd2si, + UD_Icvtsd2ss, + UD_Icvtsi2ss, + UD_Icvtss2si, + UD_Icvtss2sd, + UD_Icvttpd2pi, + UD_Icvttpd2dq, + UD_Icvttps2dq, + UD_Icvttps2pi, + UD_Icvttsd2si, + UD_Icvtsi2sd, + UD_Icvttss2si, + UD_Icwd, + UD_Icdq, + UD_Icqo, + UD_Idaa, + UD_Idas, + UD_Idec, + UD_Idiv, + UD_Idivpd, + UD_Idivps, + UD_Idivsd, + UD_Idivss, + UD_Iemms, + UD_Ienter, + UD_If2xm1, + UD_Ifabs, + UD_Ifadd, + UD_Ifaddp, + UD_Ifbld, + UD_Ifbstp, + UD_Ifchs, + UD_Ifclex, + UD_Ifcmovb, + UD_Ifcmove, + UD_Ifcmovbe, + UD_Ifcmovu, + UD_Ifcmovnb, + UD_Ifcmovne, + UD_Ifcmovnbe, + UD_Ifcmovnu, + UD_Ifucomi, + UD_Ifcom, + UD_Ifcom2, + UD_Ifcomp3, + UD_Ifcomi, + UD_Ifucomip, + UD_Ifcomip, + UD_Ifcomp, + UD_Ifcomp5, + UD_Ifcompp, + UD_Ifcos, + UD_Ifdecstp, + UD_Ifdiv, + UD_Ifdivp, + UD_Ifdivr, + UD_Ifdivrp, + UD_Ifemms, + UD_Iffree, + UD_Iffreep, + UD_Ificom, + UD_Ificomp, + UD_Ifild, + UD_Ifincstp, + UD_Ifninit, + UD_Ifiadd, + UD_Ifidivr, + UD_Ifidiv, + UD_Ifisub, + UD_Ifisubr, + UD_Ifist, + UD_Ifistp, + UD_Ifisttp, + UD_Ifld, + UD_Ifld1, + UD_Ifldl2t, + UD_Ifldl2e, + UD_Ifldpi, + UD_Ifldlg2, + UD_Ifldln2, + UD_Ifldz, + UD_Ifldcw, + UD_Ifldenv, + UD_Ifmul, + UD_Ifmulp, + UD_Ifimul, + UD_Ifnop, + UD_Ifpatan, + UD_Ifprem, + UD_Ifprem1, + UD_Ifptan, + UD_Ifrndint, + UD_Ifrstor, + UD_Ifnsave, + UD_Ifscale, + UD_Ifsin, + UD_Ifsincos, + UD_Ifsqrt, + UD_Ifstp, + UD_Ifstp1, + UD_Ifstp8, + UD_Ifstp9, + UD_Ifst, + UD_Ifnstcw, + UD_Ifnstenv, + UD_Ifnstsw, + UD_Ifsub, + UD_Ifsubp, + UD_Ifsubr, + UD_Ifsubrp, + UD_Iftst, + UD_Ifucom, + UD_Ifucomp, + UD_Ifucompp, + UD_Ifxam, + UD_Ifxch, + UD_Ifxch4, + UD_Ifxch7, + UD_Ifxrstor, + UD_Ifxsave, + UD_Ifxtract, + UD_Ifyl2x, + UD_Ifyl2xp1, + UD_Ihlt, + UD_Iidiv, + UD_Iin, + UD_Iimul, + UD_Iinc, + UD_Iinsb, + UD_Iinsw, + UD_Iinsd, + UD_Iint1, + UD_Iint3, + UD_Iint, + UD_Iinto, + UD_Iinvd, + UD_Iinvept, + UD_Iinvlpg, + UD_Iinvlpga, + UD_Iinvvpid, + UD_Iiretw, + UD_Iiretd, + UD_Iiretq, + UD_Ijo, + UD_Ijno, + UD_Ijb, + UD_Ijae, + UD_Ijz, + UD_Ijnz, + UD_Ijbe, + UD_Ija, + UD_Ijs, + UD_Ijns, + UD_Ijp, + UD_Ijnp, + UD_Ijl, + UD_Ijge, + UD_Ijle, + UD_Ijg, + UD_Ijcxz, + UD_Ijecxz, + UD_Ijrcxz, + UD_Ijmp, + UD_Ilahf, + UD_Ilar, + UD_Ilddqu, + UD_Ildmxcsr, + UD_Ilds, + UD_Ilea, + UD_Iles, + UD_Ilfs, + UD_Ilgs, + UD_Ilidt, + UD_Ilss, + UD_Ileave, + UD_Ilfence, + UD_Ilgdt, + UD_Illdt, + UD_Ilmsw, + UD_Ilock, + UD_Ilodsb, + UD_Ilodsw, + UD_Ilodsd, + UD_Ilodsq, + UD_Iloopne, + UD_Iloope, + UD_Iloop, + UD_Ilsl, + UD_Iltr, + UD_Imaskmovq, + UD_Imaxpd, + UD_Imaxps, + UD_Imaxsd, + UD_Imaxss, + UD_Imfence, + UD_Iminpd, + UD_Iminps, + UD_Iminsd, + UD_Iminss, + UD_Imonitor, + UD_Imontmul, + UD_Imov, + UD_Imovapd, + UD_Imovaps, + UD_Imovd, + UD_Imovhpd, + UD_Imovhps, + UD_Imovlhps, + UD_Imovlpd, + UD_Imovlps, + UD_Imovhlps, + UD_Imovmskpd, + UD_Imovmskps, + UD_Imovntdq, + UD_Imovnti, + UD_Imovntpd, + UD_Imovntps, + UD_Imovntq, + UD_Imovq, + UD_Imovsb, + UD_Imovsw, + UD_Imovsd, + UD_Imovsq, + UD_Imovss, + UD_Imovsx, + UD_Imovupd, + UD_Imovups, + UD_Imovzx, + UD_Imul, + UD_Imulpd, + UD_Imulps, + UD_Imulsd, + UD_Imulss, + UD_Imwait, + UD_Ineg, + UD_Inop, + UD_Inot, + UD_Ior, + UD_Iorpd, + UD_Iorps, + UD_Iout, + UD_Ioutsb, + UD_Ioutsw, + UD_Ioutsd, + UD_Ipacksswb, + UD_Ipackssdw, + UD_Ipackuswb, + UD_Ipaddb, + UD_Ipaddw, + UD_Ipaddd, + UD_Ipaddsb, + UD_Ipaddsw, + UD_Ipaddusb, + UD_Ipaddusw, + UD_Ipand, + UD_Ipandn, + UD_Ipavgb, + UD_Ipavgw, + UD_Ipcmpeqb, + UD_Ipcmpeqw, + UD_Ipcmpeqd, + UD_Ipcmpgtb, + UD_Ipcmpgtw, + UD_Ipcmpgtd, + UD_Ipextrb, + UD_Ipextrd, + UD_Ipextrq, + UD_Ipextrw, + UD_Ipinsrb, + UD_Ipinsrw, + UD_Ipinsrd, + UD_Ipinsrq, + UD_Ipmaddwd, + UD_Ipmaxsw, + UD_Ipmaxub, + UD_Ipminsw, + UD_Ipminub, + UD_Ipmovmskb, + UD_Ipmulhuw, + UD_Ipmulhw, + UD_Ipmullw, + UD_Ipop, + UD_Ipopa, + UD_Ipopad, + UD_Ipopfw, + UD_Ipopfd, + UD_Ipopfq, + UD_Ipor, + UD_Iprefetch, + UD_Iprefetchnta, + UD_Iprefetcht0, + UD_Iprefetcht1, + UD_Iprefetcht2, + UD_Ipsadbw, + UD_Ipshufw, + UD_Ipsllw, + UD_Ipslld, + UD_Ipsllq, + UD_Ipsraw, + UD_Ipsrad, + UD_Ipsrlw, + UD_Ipsrld, + UD_Ipsrlq, + UD_Ipsubb, + UD_Ipsubw, + UD_Ipsubd, + UD_Ipsubsb, + UD_Ipsubsw, + UD_Ipsubusb, + UD_Ipsubusw, + UD_Ipunpckhbw, + UD_Ipunpckhwd, + UD_Ipunpckhdq, + UD_Ipunpcklbw, + UD_Ipunpcklwd, + UD_Ipunpckldq, + UD_Ipi2fw, + UD_Ipi2fd, + UD_Ipf2iw, + UD_Ipf2id, + UD_Ipfnacc, + UD_Ipfpnacc, + UD_Ipfcmpge, + UD_Ipfmin, + UD_Ipfrcp, + UD_Ipfrsqrt, + UD_Ipfsub, + UD_Ipfadd, + UD_Ipfcmpgt, + UD_Ipfmax, + UD_Ipfrcpit1, + UD_Ipfrsqit1, + UD_Ipfsubr, + UD_Ipfacc, + UD_Ipfcmpeq, + UD_Ipfmul, + UD_Ipfrcpit2, + UD_Ipmulhrw, + UD_Ipswapd, + UD_Ipavgusb, + UD_Ipush, + UD_Ipusha, + UD_Ipushad, + UD_Ipushfw, + UD_Ipushfd, + UD_Ipushfq, + UD_Ipxor, + UD_Ircl, + UD_Ircr, + UD_Irol, + UD_Iror, + UD_Ircpps, + UD_Ircpss, + UD_Irdmsr, + UD_Irdpmc, + UD_Irdtsc, + UD_Irdtscp, + UD_Irepne, + UD_Irep, + UD_Iret, + UD_Iretf, + UD_Irsm, + UD_Irsqrtps, + UD_Irsqrtss, + UD_Isahf, + UD_Isalc, + UD_Isar, + UD_Ishl, + UD_Ishr, + UD_Isbb, + UD_Iscasb, + UD_Iscasw, + UD_Iscasd, + UD_Iscasq, + UD_Iseto, + UD_Isetno, + UD_Isetb, + UD_Isetae, + UD_Isetz, + UD_Isetnz, + UD_Isetbe, + UD_Iseta, + UD_Isets, + UD_Isetns, + UD_Isetp, + UD_Isetnp, + UD_Isetl, + UD_Isetge, + UD_Isetle, + UD_Isetg, + UD_Isfence, + UD_Isgdt, + UD_Ishld, + UD_Ishrd, + UD_Ishufpd, + UD_Ishufps, + UD_Isidt, + UD_Isldt, + UD_Ismsw, + UD_Isqrtps, + UD_Isqrtpd, + UD_Isqrtsd, + UD_Isqrtss, + UD_Istc, + UD_Istd, + UD_Istgi, + UD_Isti, + UD_Iskinit, + UD_Istmxcsr, + UD_Istosb, + UD_Istosw, + UD_Istosd, + UD_Istosq, + UD_Istr, + UD_Isub, + UD_Isubpd, + UD_Isubps, + UD_Isubsd, + UD_Isubss, + UD_Iswapgs, + UD_Isyscall, + UD_Isysenter, + UD_Isysexit, + UD_Isysret, + UD_Itest, + UD_Iucomisd, + UD_Iucomiss, + UD_Iud2, + UD_Iunpckhpd, + UD_Iunpckhps, + UD_Iunpcklps, + UD_Iunpcklpd, + UD_Iverr, + UD_Iverw, + UD_Ivmcall, + UD_Ivmclear, + UD_Ivmxon, + UD_Ivmptrld, + UD_Ivmptrst, + UD_Ivmlaunch, + UD_Ivmresume, + UD_Ivmxoff, + UD_Ivmread, + UD_Ivmwrite, + UD_Ivmrun, + UD_Ivmmcall, + UD_Ivmload, + UD_Ivmsave, + UD_Iwait, + UD_Iwbinvd, + UD_Iwrmsr, + UD_Ixadd, + UD_Ixchg, + UD_Ixgetbv, + UD_Ixlatb, + UD_Ixor, + UD_Ixorpd, + UD_Ixorps, + UD_Ixcryptecb, + UD_Ixcryptcbc, + UD_Ixcryptctr, + UD_Ixcryptcfb, + UD_Ixcryptofb, + UD_Ixrstor, + UD_Ixsave, + UD_Ixsetbv, + UD_Ixsha1, + UD_Ixsha256, + UD_Ixstore, + UD_Iaesdec, + UD_Iaesdeclast, + UD_Iaesenc, + UD_Iaesenclast, + UD_Iaesimc, + UD_Iaeskeygenassist, + UD_Ipclmulqdq, + UD_Igetsec, + UD_Imovdqa, + UD_Imaskmovdqu, + UD_Imovdq2q, + UD_Imovdqu, + UD_Imovq2dq, + UD_Ipaddq, + UD_Ipsubq, + UD_Ipmuludq, + UD_Ipshufhw, + UD_Ipshuflw, + UD_Ipshufd, + UD_Ipslldq, + UD_Ipsrldq, + UD_Ipunpckhqdq, + UD_Ipunpcklqdq, + UD_Iaddsubpd, + UD_Iaddsubps, + UD_Ihaddpd, + UD_Ihaddps, + UD_Ihsubpd, + UD_Ihsubps, + UD_Imovddup, + UD_Imovshdup, + UD_Imovsldup, + UD_Ipabsb, + UD_Ipabsw, + UD_Ipabsd, + UD_Ipshufb, + UD_Iphaddw, + UD_Iphaddd, + UD_Iphaddsw, + UD_Ipmaddubsw, + UD_Iphsubw, + UD_Iphsubd, + UD_Iphsubsw, + UD_Ipsignb, + UD_Ipsignd, + UD_Ipsignw, + UD_Ipmulhrsw, + UD_Ipalignr, + UD_Ipblendvb, + UD_Ipmuldq, + UD_Ipminsb, + UD_Ipminsd, + UD_Ipminuw, + UD_Ipminud, + UD_Ipmaxsb, + UD_Ipmaxsd, + UD_Ipmaxud, + UD_Ipmaxuw, + UD_Ipmulld, + UD_Iphminposuw, + UD_Iroundps, + UD_Iroundpd, + UD_Iroundss, + UD_Iroundsd, + UD_Iblendpd, + UD_Ipblendw, + UD_Iblendps, + UD_Iblendvpd, + UD_Iblendvps, + UD_Idpps, + UD_Idppd, + UD_Impsadbw, + UD_Iextractps, + UD_Iinsertps, + UD_Imovntdqa, + UD_Ipackusdw, + UD_Ipmovsxbw, + UD_Ipmovsxbd, + UD_Ipmovsxbq, + UD_Ipmovsxwd, + UD_Ipmovsxwq, + UD_Ipmovsxdq, + UD_Ipmovzxbw, + UD_Ipmovzxbd, + UD_Ipmovzxbq, + UD_Ipmovzxwd, + UD_Ipmovzxwq, + UD_Ipmovzxdq, + UD_Ipcmpeqq, + UD_Ipopcnt, + UD_Iptest, + UD_Ipcmpestri, + UD_Ipcmpestrm, + UD_Ipcmpgtq, + UD_Ipcmpistri, + UD_Ipcmpistrm, + UD_Imovbe, + UD_Icrc32, + UD_MAX_MNEMONIC_CODE +} UD_ATTR_PACKED; -extern const char* ud_mnemonics_str[];; -extern struct ud_itab_entry* ud_itab_list[]; +extern const char * ud_mnemonics_str[]; -#endif +#endif /* UD_ITAB_H */ diff --git a/headers/libs/udis86/libudis86/syn.h b/headers/libs/udis86/libudis86/syn.h index 7e62066..d3b1e3f 100644 --- a/headers/libs/udis86/libudis86/syn.h +++ b/headers/libs/udis86/libudis86/syn.h @@ -1,25 +1,53 @@ -/* ----------------------------------------------------------------------------- - * syn.h +/* udis86 - libudis86/syn.h * - * Copyright (c) 2006, Vivek Mohan <vivek@xxxxxxxx> - * All rights reserved. See LICENSE - * ----------------------------------------------------------------------------- + * Copyright (c) 2002-2009 + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef UD_SYN_H #define UD_SYN_H -#include <stdio.h> -#include <stdarg.h> #include "types.h" +#ifndef __UD_STANDALONE__ +# include <stdarg.h> +#endif /* __UD_STANDALONE__ */ extern const char* ud_reg_tab[]; -static void mkasm(struct ud* u, const char* fmt, ...) -{ - va_list ap; - va_start(ap, fmt); - u->insn_fill += vsprintf((char*) u->insn_buffer + u->insn_fill, fmt, ap); - va_end(ap); -} +uint64_t ud_syn_rel_target(struct ud*, struct ud_operand*); +#ifdef __GNUC__ +int ud_asmprintf(struct ud *u, const char *fmt, ...) + __attribute__ ((format (printf, 2, 3))); +#else +int ud_asmprintf(struct ud *u, const char *fmt, ...); #endif + +void ud_syn_print_addr(struct ud *u, uint64_t addr); +void ud_syn_print_imm(struct ud* u, const struct ud_operand *op); +void ud_syn_print_mem_disp(struct ud* u, const struct ud_operand *, int sign); + +#endif /* UD_SYN_H */ + +/* +vim: set ts=2 sw=2 expandtab +*/ diff --git a/headers/libs/udis86/libudis86/types.h b/headers/libs/udis86/libudis86/types.h index 46afdc6..84b3ac8 100644 --- a/headers/libs/udis86/libudis86/types.h +++ b/headers/libs/udis86/libudis86/types.h @@ -1,31 +1,58 @@ -/* ----------------------------------------------------------------------------- - * types.h +/* udis86 - libudis86/types.h * - * Copyright (c) 2006, Vivek Mohan <vivek@xxxxxxxx> - * All rights reserved. See LICENSE - * ----------------------------------------------------------------------------- + * Copyright (c) 2002-2013 Vivek Thampi + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef UD_TYPES_H #define UD_TYPES_H -#include <stdio.h> - -#ifdef _MSC_VER -# define FMT64 "%I64" - typedef unsigned __int8 uint8_t; - typedef unsigned __int16 uint16_t; - typedef unsigned __int32 uint32_t; - typedef unsigned __int64 uint64_t; - typedef __int8 int8_t; - typedef __int16 int16_t; - typedef __int32 int32_t; - typedef __int64 int64_t; -#else -# define FMT64 "%ll" -# include <inttypes.h> +#ifdef __KERNEL__ + /* -D__KERNEL__ is automatically passed on the command line when + building something as part of the Linux kernel */ +# include <linux/kernel.h> +# include <linux/string.h> +# ifndef __UD_STANDALONE__ +# define __UD_STANDALONE__ 1 #endif +#endif /* __KERNEL__ */ + +#if defined(_MSC_VER) || defined(__BORLANDC__) +# include <stdint.h> +# include <stdio.h> +# define inline __inline /* MS Visual Studio requires __inline + instead of inline for C code */ +#elif !defined(__UD_STANDALONE__) || defined(__HAIKU__) +# include <stdio.h> +# include <inttypes.h> +#endif /* !__UD_STANDALONE__ */ + +/* gcc specific extensions */ +#if defined(__GNUC__) && __GNUC__ > 2 +# define UD_ATTR_PACKED __attribute__((packed)) +#else +# define UD_ATTR_PACKED +#endif /* UD_ATTR_PACKED */ -#include "itab.h" /* ----------------------------------------------------------------------------- * All possible "types" of objects in udis86. Order is Important! @@ -36,95 +63,101 @@ enum ud_type UD_NONE, /* 8 bit GPRs */ - UD_R_AL, UD_R_CL, UD_R_DL, UD_R_BL, - UD_R_AH, UD_R_CH, UD_R_DH, UD_R_BH, - UD_R_SPL, UD_R_BPL, UD_R_SIL, UD_R_DIL, - UD_R_R8B, UD_R_R9B, UD_R_R10B, UD_R_R11B, - UD_R_R12B, UD_R_R13B, UD_R_R14B, UD_R_R15B, + UD_R_AL, UD_R_CL, UD_R_DL, UD_R_BL, + UD_R_AH, UD_R_CH, UD_R_DH, UD_R_BH, + UD_R_SPL, UD_R_BPL, UD_R_SIL, UD_R_DIL, + UD_R_R8B, UD_R_R9B, UD_R_R10B, UD_R_R11B, + UD_R_R12B, UD_R_R13B, UD_R_R14B, UD_R_R15B, /* 16 bit GPRs */ - UD_R_AX, UD_R_CX, UD_R_DX, UD_R_BX, - UD_R_SP, UD_R_BP, UD_R_SI, UD_R_DI, - UD_R_R8W, UD_R_R9W, UD_R_R10W, UD_R_R11W, - UD_R_R12W, UD_R_R13W, UD_R_R14W, UD_R_R15W, - + UD_R_AX, UD_R_CX, UD_R_DX, UD_R_BX, + UD_R_SP, UD_R_BP, UD_R_SI, UD_R_DI, + UD_R_R8W, UD_R_R9W, UD_R_R10W, UD_R_R11W, + UD_R_R12W, UD_R_R13W, UD_R_R14W, UD_R_R15W, + /* 32 bit GPRs */ - UD_R_EAX, UD_R_ECX, UD_R_EDX, UD_R_EBX, - UD_R_ESP, UD_R_EBP, UD_R_ESI, UD_R_EDI, - UD_R_R8D, UD_R_R9D, UD_R_R10D, UD_R_R11D, - UD_R_R12D, UD_R_R13D, UD_R_R14D, UD_R_R15D, - + UD_R_EAX, UD_R_ECX, UD_R_EDX, UD_R_EBX, + UD_R_ESP, UD_R_EBP, UD_R_ESI, UD_R_EDI, + UD_R_R8D, UD_R_R9D, UD_R_R10D, UD_R_R11D, + UD_R_R12D, UD_R_R13D, UD_R_R14D, UD_R_R15D, + /* 64 bit GPRs */ - UD_R_RAX, UD_R_RCX, UD_R_RDX, UD_R_RBX, - UD_R_RSP, UD_R_RBP, UD_R_RSI, UD_R_RDI, - UD_R_R8, UD_R_R9, UD_R_R10, UD_R_R11, - UD_R_R12, UD_R_R13, UD_R_R14, UD_R_R15, + UD_R_RAX, UD_R_RCX, UD_R_RDX, UD_R_RBX, + UD_R_RSP, UD_R_RBP, UD_R_RSI, UD_R_RDI, + UD_R_R8, UD_R_R9, UD_R_R10, UD_R_R11, + UD_R_R12, UD_R_R13, UD_R_R14, UD_R_R15, /* segment registers */ - UD_R_ES, UD_R_CS, UD_R_SS, UD_R_DS, - UD_R_FS, UD_R_GS, + UD_R_ES, UD_R_CS, UD_R_SS, UD_R_DS, + UD_R_FS, UD_R_GS, /* control registers*/ - UD_R_CR0, UD_R_CR1, UD_R_CR2, UD_R_CR3, - UD_R_CR4, UD_R_CR5, UD_R_CR6, UD_R_CR7, - UD_R_CR8, UD_R_CR9, UD_R_CR10, UD_R_CR11, - UD_R_CR12, UD_R_CR13, UD_R_CR14, UD_R_CR15, - + UD_R_CR0, UD_R_CR1, UD_R_CR2, UD_R_CR3, + UD_R_CR4, UD_R_CR5, UD_R_CR6, UD_R_CR7, + UD_R_CR8, UD_R_CR9, UD_R_CR10, UD_R_CR11, + UD_R_CR12, UD_R_CR13, UD_R_CR14, UD_R_CR15, + /* debug registers */ - UD_R_DR0, UD_R_DR1, UD_R_DR2, UD_R_DR3, - UD_R_DR4, UD_R_DR5, UD_R_DR6, UD_R_DR7, - UD_R_DR8, UD_R_DR9, UD_R_DR10, UD_R_DR11, - UD_R_DR12, UD_R_DR13, UD_R_DR14, UD_R_DR15, + UD_R_DR0, UD_R_DR1, UD_R_DR2, UD_R_DR3, + UD_R_DR4, UD_R_DR5, UD_R_DR6, UD_R_DR7, + UD_R_DR8, UD_R_DR9, UD_R_DR10, UD_R_DR11, + UD_R_DR12, UD_R_DR13, UD_R_DR14, UD_R_DR15, /* mmx registers */ - UD_R_MM0, UD_R_MM1, UD_R_MM2, UD_R_MM3, - UD_R_MM4, UD_R_MM5, UD_R_MM6, UD_R_MM7, + UD_R_MM0, UD_R_MM1, UD_R_MM2, UD_R_MM3, + UD_R_MM4, UD_R_MM5, UD_R_MM6, UD_R_MM7, /* x87 registers */ - UD_R_ST0, UD_R_ST1, UD_R_ST2, UD_R_ST3, - UD_R_ST4, UD_R_ST5, UD_R_ST6, UD_R_ST7, + UD_R_ST0, UD_R_ST1, UD_R_ST2, UD_R_ST3, + UD_R_ST4, UD_R_ST5, UD_R_ST6, UD_R_ST7, /* extended multimedia registers */ - UD_R_XMM0, UD_R_XMM1, UD_R_XMM2, UD_R_XMM3, - UD_R_XMM4, UD_R_XMM5, UD_R_XMM6, UD_R_XMM7, - UD_R_XMM8, UD_R_XMM9, UD_R_XMM10, UD_R_XMM11, - UD_R_XMM12, UD_R_XMM13, UD_R_XMM14, UD_R_XMM15, + UD_R_XMM0, UD_R_XMM1, UD_R_XMM2, UD_R_XMM3, + UD_R_XMM4, UD_R_XMM5, UD_R_XMM6, UD_R_XMM7, + UD_R_XMM8, UD_R_XMM9, UD_R_XMM10, UD_R_XMM11, + UD_R_XMM12, UD_R_XMM13, UD_R_XMM14, UD_R_XMM15, UD_R_RIP, /* Operand Types */ - UD_OP_REG, UD_OP_MEM, UD_OP_PTR, UD_OP_IMM, - UD_OP_JIMM, UD_OP_CONST + UD_OP_REG, UD_OP_MEM, UD_OP_PTR, UD_OP_IMM, + UD_OP_JIMM, UD_OP_CONST +}; + +#include "itab.h" + +union ud_lval { + int8_t sbyte; + uint8_t ubyte; + int16_t sword; + uint16_t uword; + int32_t sdword; + uint32_t udword; + int64_t sqword; + uint64_t uqword; + struct { + uint16_t seg; + uint32_t off; + } ptr; }; /* ----------------------------------------------------------------------------- * struct ud_operand - Disassembled instruction Operand. * ----------------------------------------------------------------------------- */ -struct ud_operand -{ - enum ud_type type; - uint8_t size; - union { - int8_t sbyte; - uint8_t ubyte; - int16_t sword; - uint16_t uword; - int32_t sdword; - uint32_t udword; - int64_t sqword; - uint64_t uqword; - - struct { - uint16_t seg; - uint32_t off; - } ptr; - } lval; - - enum ud_type base; - enum ud_type index; - uint8_t offset; - uint8_t scale; +struct ud_operand { + enum ud_type type; + uint8_t size; + enum ud_type base; + enum ud_type index; + uint8_t scale; + uint8_t offset; + union ud_lval lval; + /* + * internal use only + */ + uint64_t _legacy; /* this will be removed in 1.8 */ + uint8_t _oprcode; }; /* ----------------------------------------------------------------------------- @@ -133,68 +166,85 @@ struct ud_operand */ struct ud { - int (*inp_hook) (struct ud*); - uint8_t inp_curr; - uint8_t inp_fill; - FILE* inp_file; - uint8_t inp_ctr; - uint8_t* inp_buff; - uint8_t* inp_buff_end; - uint8_t inp_end; - void (*translator)(struct ud*); - uint64_t insn_offset; - char insn_hexcode[32]; - char insn_buffer[64]; - unsigned int insn_fill; - uint8_t dis_mode; - uint64_t pc; - uint8_t vendor; - struct map_entry* mapen; - enum ud_mnemonic_code mnemonic; - struct ud_operand operand[3]; - uint8_t error; - uint8_t pfx_rex; - uint8_t pfx_seg; - uint8_t pfx_opr; - uint8_t pfx_adr; - uint8_t pfx_lock; - uint8_t pfx_rep; - uint8_t pfx_repe; - uint8_t pfx_repne; - uint8_t pfx_insn; - uint8_t default64; - uint8_t opr_mode; - uint8_t adr_mode; - uint8_t br_far; - uint8_t br_near; - uint8_t implicit_addr; - uint8_t c1; - uint8_t c2; - uint8_t c3; - uint8_t inp_cache[256]; - uint8_t inp_sess[64]; + /* + * input buffering + */ + int (*inp_hook) (struct ud*); +#ifndef __UD_STANDALONE__ + FILE* inp_file; +#endif + const uint8_t* inp_buf; + size_t inp_buf_size; + size_t inp_buf_index; + uint8_t inp_curr; + size_t inp_ctr; + uint8_t inp_sess[64]; + int inp_end; + + void (*translator)(struct ud*); + uint64_t insn_offset; + char insn_hexcode[64]; + + /* + * Assembly output buffer + */ + char *asm_buf; + size_t asm_buf_size; + size_t asm_buf_fill; + char asm_buf_int[128]; + + /* + * Symbol resolver for use in the translation phase. + */ + const char* (*sym_resolver)(struct ud*, uint64_t addr, int64_t *offset); + + uint8_t dis_mode; + uint64_t pc; + uint8_t vendor; + enum ud_mnemonic_code mnemonic; + struct ud_operand operand[3]; + uint8_t error; + uint8_t pfx_rex; + uint8_t pfx_seg; + uint8_t pfx_opr; + uint8_t pfx_adr; + uint8_t pfx_lock; + uint8_t pfx_str; + uint8_t pfx_rep; + uint8_t pfx_repe; + uint8_t pfx_repne; + uint8_t opr_mode; + uint8_t adr_mode; + uint8_t br_far; + uint8_t br_near; + uint8_t have_modrm; + uint8_t modrm; + uint8_t primary_opcode; + void * user_opaque_data; struct ud_itab_entry * itab_entry; + struct ud_lookup_table_list_entry *le; }; /* ----------------------------------------------------------------------------- * Type-definitions * ----------------------------------------------------------------------------- */ -typedef enum ud_type ud_type_t; -typedef enum ud_mnemonic_code ud_mnemonic_code_t; +typedef enum ud_type ud_type_t; +typedef enum ud_mnemonic_code ud_mnemonic_code_t; -typedef struct ud ud_t; -typedef struct ud_operand ud_operand_t; +typedef struct ud ud_t; +typedef struct ud_operand ud_operand_t; -#define UD_SYN_INTEL ud_translate_intel -#define UD_SYN_ATT ud_translate_att -#define UD_EOI -1 -#define UD_INP_CACHE_SZ 32 -#define UD_VENDOR_AMD 0 -#define UD_VENDOR_INTEL 1 - -#define bail_out(ud,error_code) longjmp( (ud)->bailout, error_code ) -#define try_decode(ud) if ( setjmp( (ud)->bailout ) == 0 ) -#define catch_error() else +#define UD_SYN_INTEL ud_translate_intel +#define UD_SYN_ATT ud_translate_att +#define UD_EOI (-1) +#define UD_INP_CACHE_SZ 32 +#define UD_VENDOR_AMD 0 +#define UD_VENDOR_INTEL 1 +#define UD_VENDOR_ANY 2 #endif + +/* +vim: set ts=2 sw=2 expandtab +*/ diff --git a/headers/libs/udis86/libudis86/udint.h b/headers/libs/udis86/libudis86/udint.h new file mode 100644 index 0000000..2908b61 --- /dev/null +++ b/headers/libs/udis86/libudis86/udint.h @@ -0,0 +1,89 @@ +/* udis86 - libudis86/udint.h -- definitions for internal use only + * + * Copyright (c) 2002-2009 Vivek Thampi + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +#ifndef _UDINT_H_ +#define _UDINT_H_ + +#ifdef HAVE_CONFIG_H +# include <config.h> +#endif /* HAVE_CONFIG_H */ + +#if defined(UD_DEBUG) && HAVE_ASSERT_H +# include <assert.h> +# define UD_ASSERT(_x) assert(_x) +#else +# define UD_ASSERT(_x) +#endif /* !HAVE_ASSERT_H */ + +#if defined(UD_DEBUG) + #define UDERR(u, msg) \ + do { \ + (u)->error = 1; \ + fprintf(stderr, "decode-error: %s:%d: %s", \ + __FILE__, __LINE__, (msg)); \ + } while (0) +#else + #define UDERR(u, m) \ + do { \ + (u)->error = 1; \ + } while (0) +#endif /* !LOGERR */ + +#define UD_RETURN_ON_ERROR(u) \ + do { \ + if ((u)->error != 0) { \ + return (u)->error; \ + } \ + } while (0) + +#define UD_RETURN_WITH_ERROR(u, m) \ + do { \ + UDERR(u, m); \ + return (u)->error; \ + } while (0) + +#ifndef __UD_STANDALONE__ +# define UD_NON_STANDALONE(x) x +#else +# define UD_NON_STANDALONE(x) +#endif + +/* printf formatting int64 specifier */ +#ifdef FMT64 +# undef FMT64 +#endif +#if defined(_MSC_VER) || defined(__BORLANDC__) +# define FMT64 "I64" +#else +# if defined(__APPLE__) +# define FMT64 "ll" +# elif defined(__amd64__) || defined(__x86_64__) +# define FMT64 "l" +# else +# define FMT64 "ll" +# endif /* !x64 */ +#endif + +#endif /* _UDINT_H_ */ diff --git a/headers/libs/udis86/udis86.h b/headers/libs/udis86/udis86.h index 2228778..bdd3857 100644 --- a/headers/libs/udis86/udis86.h +++ b/headers/libs/udis86/udis86.h @@ -1,11 +1,28 @@ -/* ----------------------------------------------------------------------------- - * udis86.h +/* udis86 - udis86.h * - * Copyright (c) 2002, 2003, 2004 Vivek Mohan <vivek@xxxxxxxx> - * All rights reserved. See (LICENSE) - * ----------------------------------------------------------------------------- + * Copyright (c) 2002-2009 Vivek Thampi + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ - #ifndef UDIS86_H #define UDIS86_H diff --git a/src/add-ons/kernel/debugger/disasm/x86/Jamfile b/src/add-ons/kernel/debugger/disasm/x86/Jamfile index 7cd107c..466bb9a 100644 --- a/src/add-ons/kernel/debugger/disasm/x86/Jamfile +++ b/src/add-ons/kernel/debugger/disasm/x86/Jamfile @@ -11,7 +11,6 @@ DEFINES += __assert_fail=disasm_arch_assert ; local libUdis86Sources = decode.c - input.c itab.c syn-att.c syn.c diff --git a/src/libs/udis86/Jamfile b/src/libs/udis86/Jamfile index 2047e4e..ff04715 100644 --- a/src/libs/udis86/Jamfile +++ b/src/libs/udis86/Jamfile @@ -7,7 +7,6 @@ UseHeaders [ LibraryHeaders [ FDirName udis86 libudis86 ] ] ; StaticLibrary libudis86.a : decode.c - input.c itab.c syn-att.c syn.c diff --git a/src/libs/udis86/decode.c b/src/libs/udis86/decode.c index d9daa7d..b4efa77 100644 --- a/src/libs/udis86/decode.c +++ b/src/libs/udis86/decode.c @@ -1,337 +1,281 @@ -/* ----------------------------------------------------------------------------- - * decode.c - * - * Copyright (c) 2005, 2006, Vivek Mohan <vivek@xxxxxxxx> - * All rights reserved. See LICENSE - * ----------------------------------------------------------------------------- +/* udis86 - libudis86/decode.c + * + * Copyright (c) 2002-2009 Vivek Thampi + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR [ *** diff truncated: 15674 lines dropped *** ] ############################################################################ Revision: hrev48284 Commit: 1aa19cd3ec09571c9baba0b83625231adcde07bb URL: http://cgit.haiku-os.org/haiku/commit/?id=1aa19cd Author: Adrien Destugues <pulkomandy@xxxxxxxxx> Date: Wed Nov 12 11:06:37 2014 UTC KDL disassembler: implement symbol lookup The new udis makes it possible to hook a symbol lookup function, so we can get symbol names and offsets instead of raw addresses in call and jump instrucitons. ----------------------------------------------------------------------------