| Index: third_party/mach_override/libudis86/types.h
|
| diff --git a/third_party/mach_override/libudis86/types.h b/third_party/mach_override/libudis86/types.h
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..bdfd4d9e0235db6fbabd6d49f2d59f85537cb9e1
|
| --- /dev/null
|
| +++ b/third_party/mach_override/libudis86/types.h
|
| @@ -0,0 +1,253 @@
|
| +/* udis86 - libudis86/types.h
|
| + *
|
| + * 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
|
| +
|
| +#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__)
|
| +# include <stdio.h>
|
| +# include <inttypes.h>
|
| +#endif /* !__UD_STANDALONE__ */
|
| +
|
| +/* gcc specific extensions */
|
| +#ifdef __GNUC__
|
| +# define UD_ATTR_PACKED __attribute__((packed))
|
| +#else
|
| +# define UD_ATTR_PACKED
|
| +#endif /* UD_ATTR_PACKED */
|
| +
|
| +
|
| +/* -----------------------------------------------------------------------------
|
| + * All possible "types" of objects in udis86. Order is Important!
|
| + * -----------------------------------------------------------------------------
|
| + */
|
| +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,
|
| +
|
| + /* 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,
|
| +
|
| + /* 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,
|
| +
|
| + /* 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,
|
| +
|
| + /* segment registers */
|
| + 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,
|
| +
|
| + /* 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,
|
| +
|
| + /* 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,
|
| +
|
| + /* 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,
|
| +
|
| + /* 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_RIP,
|
| +
|
| + /* Operand Types */
|
| + 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;
|
| + enum ud_type base;
|
| + enum ud_type index;
|
| + uint8_t scale;
|
| + uint8_t offset;
|
| + union ud_lval lval;
|
| + uint64_t disp;
|
| + /*
|
| + * internal use only
|
| + */
|
| + uint8_t _oprcode;
|
| +};
|
| +
|
| +/* -----------------------------------------------------------------------------
|
| + * struct ud - The udis86 object.
|
| + * -----------------------------------------------------------------------------
|
| + */
|
| +struct ud
|
| +{
|
| + /*
|
| + * input buffering
|
| + */
|
| + int (*inp_hook) (struct ud*);
|
| +#ifndef __UD_STANDALONE__
|
| + FILE* inp_file;
|
| +#endif
|
| + uint8_t inp_curr;
|
| + uint8_t inp_fill;
|
| + uint8_t inp_ctr;
|
| + const uint8_t* inp_buff;
|
| + const uint8_t* inp_buff_end;
|
| + uint8_t inp_end;
|
| + uint8_t inp_cache[256];
|
| + uint8_t inp_sess[64];
|
| +
|
| + 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 default64;
|
| + uint8_t opr_mode;
|
| + uint8_t adr_mode;
|
| + uint8_t br_far;
|
| + uint8_t br_near;
|
| + uint8_t implicit_addr;
|
| + 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 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 UD_VENDOR_ANY 2
|
| +
|
| +#endif
|
| +
|
| +/*
|
| +vim: set ts=2 sw=2 expandtab
|
| +*/
|
|
|