mirror of
https://github.com/Obfuscator-Collections/VMProtect.git
synced 2025-08-02 12:20:12 +03:00
first commit
Version 3.x.x
This commit is contained in:
7
third-party/libudis86/Makefile
vendored
Normal file
7
third-party/libudis86/Makefile
vendored
Normal file
@@ -0,0 +1,7 @@
|
||||
#
|
||||
# DO NOT EDIT THIS FILE!!! Edit .\sources. if you want to add a new source
|
||||
# file to this component. This file merely indirects to the real make file
|
||||
# that is shared by all the driver components of the Windows NT DDK
|
||||
#
|
||||
|
||||
!INCLUDE $(NTMAKEENV)\makefile.def
|
14
third-party/libudis86/Makefile.lnx
vendored
Normal file
14
third-party/libudis86/Makefile.lnx
vendored
Normal file
@@ -0,0 +1,14 @@
|
||||
#!/usr/bin/make -f
|
||||
# for quick linux building as static library
|
||||
SRCS = decode.c input.c itab.c mnem.c syn.c syn-intel.c udis86.c
|
||||
OBJS = $(patsubst %.c,%.o,$(SRCS))
|
||||
|
||||
libudis86.a: $(OBJS)
|
||||
ar cr $@ $^
|
||||
ranlib $@
|
||||
|
||||
%.o: %.c
|
||||
$(CC) -I. -Wall -fpic -c -o $@ $<
|
||||
|
||||
clean:
|
||||
rm -f libudis86.a $(OBJS)
|
6
third-party/libudis86/Sources
vendored
Normal file
6
third-party/libudis86/Sources
vendored
Normal file
@@ -0,0 +1,6 @@
|
||||
TARGETTYPE=DRIVER_LIBRARY
|
||||
TARGETNAME=udis
|
||||
|
||||
C_DEFINES = $(C_DEFINES) /D__UD_STANDALONE__
|
||||
|
||||
SOURCES=input.c itab.c udis86.c decode.c
|
1244
third-party/libudis86/decode.c
vendored
Normal file
1244
third-party/libudis86/decode.c
vendored
Normal file
File diff suppressed because it is too large
Load Diff
275
third-party/libudis86/decode.h
vendored
Normal file
275
third-party/libudis86/decode.h
vendored
Normal file
@@ -0,0 +1,275 @@
|
||||
#ifndef UD_DECODE_H
|
||||
#define UD_DECODE_H
|
||||
|
||||
#define MAX_INSN_LENGTH 15
|
||||
|
||||
/* 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
|
||||
|
||||
/* itab prefix bits */
|
||||
#define P_none ( 0 )
|
||||
#define P_c1 ( 1 << 0 )
|
||||
#define P_C1(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 )
|
||||
#define P_REXR(n) ( ( n >> 8 ) & 1 )
|
||||
#define P_oso ( 1 << 9 )
|
||||
#define P_OSO(n) ( ( n >> 9 ) & 1 )
|
||||
#define P_aso ( 1 << 10 )
|
||||
#define P_ASO(n) ( ( n >> 10 ) & 1 )
|
||||
#define P_rexx ( 1 << 11 )
|
||||
#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 )
|
||||
|
||||
/* operand type constants -- order is important! */
|
||||
|
||||
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_AX, OP_CX, OP_DX, OP_BX,
|
||||
OP_SI, OP_DI, OP_SP, OP_BP,
|
||||
|
||||
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_ES, OP_CS, OP_SS, OP_DS,
|
||||
OP_FS, OP_GS,
|
||||
|
||||
OP_ST0, OP_ST1, OP_ST2, OP_ST3,
|
||||
OP_ST4, OP_ST5, OP_ST6, OP_ST7,
|
||||
|
||||
OP_J, OP_S, OP_O,
|
||||
OP_I1, OP_I3,
|
||||
|
||||
OP_V, OP_W, OP_Q, OP_P,
|
||||
|
||||
OP_R, OP_C, OP_D, OP_VR, OP_PR
|
||||
};
|
||||
|
||||
|
||||
/* operand size constants */
|
||||
|
||||
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,
|
||||
* and thus hard-coded. changing them
|
||||
* will break internals
|
||||
*/
|
||||
SZ_B = 8,
|
||||
SZ_W = 16,
|
||||
SZ_D = 32,
|
||||
SZ_Q = 64,
|
||||
SZ_T = 80,
|
||||
};
|
||||
|
||||
/* 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 }
|
||||
|
||||
|
||||
/* A single operand of an entry in the instruction table.
|
||||
* (internal use only)
|
||||
*/
|
||||
struct ud_itab_entry_operand
|
||||
{
|
||||
enum ud_operand_code type;
|
||||
enum ud_operand_size size;
|
||||
};
|
||||
|
||||
|
||||
/* A single entry in an instruction table.
|
||||
*(internal use only)
|
||||
*/
|
||||
struct ud_itab_entry
|
||||
{
|
||||
enum ud_mnemonic_code mnemonic;
|
||||
struct ud_itab_entry_operand operand1;
|
||||
struct ud_itab_entry_operand operand2;
|
||||
struct ud_itab_entry_operand operand3;
|
||||
uint32_t prefix;
|
||||
};
|
||||
|
||||
extern const char * ud_lookup_mnemonic( enum ud_mnemonic_code c );
|
||||
|
||||
#endif /* UD_DECODE_H */
|
||||
|
||||
/* vim:cindent
|
||||
* vim:expandtab
|
||||
* vim:ts=4
|
||||
* vim:sw=4
|
||||
*/
|
65
third-party/libudis86/extern.h
vendored
Normal file
65
third-party/libudis86/extern.h
vendored
Normal file
@@ -0,0 +1,65 @@
|
||||
/* -----------------------------------------------------------------------------
|
||||
* extern.h
|
||||
*
|
||||
* Copyright (c) 2004, 2005, 2006, Vivek Mohan <vivek@sig9.com>
|
||||
* All rights reserved. See LICENSE
|
||||
* -----------------------------------------------------------------------------
|
||||
*/
|
||||
#ifndef UD_EXTERN_H
|
||||
#define UD_EXTERN_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#include <stdio.h>
|
||||
#include "types.h"
|
||||
|
||||
/* ============================= PUBLIC API ================================= */
|
||||
|
||||
extern void ud_init(struct ud*);
|
||||
|
||||
extern void ud_set_mode(struct ud*, uint8_t);
|
||||
|
||||
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);
|
||||
|
||||
#ifndef __UD_STANDALONE__
|
||||
extern void ud_set_input_file(struct ud*, FILE*);
|
||||
#endif /* __UD_STANDALONE__ */
|
||||
|
||||
extern void ud_set_vendor(struct ud*, unsigned);
|
||||
|
||||
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 unsigned int ud_decode(struct ud*);
|
||||
|
||||
extern unsigned int ud_disassemble(struct ud*);
|
||||
|
||||
extern void ud_translate_intel(struct ud*);
|
||||
|
||||
extern void ud_translate_att(struct ud*);
|
||||
|
||||
extern char* ud_insn_asm(struct ud* u);
|
||||
|
||||
extern uint8_t* ud_insn_ptr(struct ud* u);
|
||||
|
||||
extern uint64_t ud_insn_off(struct ud*);
|
||||
|
||||
extern char* ud_insn_hex(struct ud*);
|
||||
|
||||
extern unsigned int ud_insn_len(struct ud* u);
|
||||
|
||||
/* ========================================================================== */
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif
|
226
third-party/libudis86/input.c
vendored
Normal file
226
third-party/libudis86/input.c
vendored
Normal file
@@ -0,0 +1,226 @@
|
||||
/* -----------------------------------------------------------------------------
|
||||
* input.c
|
||||
*
|
||||
* Copyright (c) 2004, 2005, 2006, Vivek Mohan <vivek@sig9.com>
|
||||
* All rights reserved. See LICENSE
|
||||
* -----------------------------------------------------------------------------
|
||||
*/
|
||||
#include "extern.h"
|
||||
#include "types.h"
|
||||
#include "input.h"
|
||||
|
||||
/* -----------------------------------------------------------------------------
|
||||
* inp_buff_hook() - Hook for buffered inputs.
|
||||
* -----------------------------------------------------------------------------
|
||||
*/
|
||||
static int
|
||||
inp_buff_hook(struct ud* u)
|
||||
{
|
||||
if (u->inp_buff < u->inp_buff_end)
|
||||
return *u->inp_buff++;
|
||||
else return -1;
|
||||
}
|
||||
|
||||
#ifndef __UD_STANDALONE__
|
||||
/* -----------------------------------------------------------------------------
|
||||
* inp_file_hook() - Hook for FILE inputs.
|
||||
* -----------------------------------------------------------------------------
|
||||
*/
|
||||
static int
|
||||
inp_file_hook(struct ud* u)
|
||||
{
|
||||
return fgetc(u->inp_file);
|
||||
}
|
||||
#endif /* __UD_STANDALONE__*/
|
||||
|
||||
/* =============================================================================
|
||||
* ud_inp_set_hook() - Sets input hook.
|
||||
* =============================================================================
|
||||
*/
|
||||
extern void
|
||||
ud_set_input_hook(register struct ud* u, int (*hook)(struct ud*))
|
||||
{
|
||||
u->inp_hook = hook;
|
||||
inp_init(u);
|
||||
}
|
||||
|
||||
/* =============================================================================
|
||||
* ud_inp_set_buffer() - Set buffer as input.
|
||||
* =============================================================================
|
||||
*/
|
||||
extern void
|
||||
ud_set_input_buffer(register struct ud* u, uint8_t* buf, size_t len)
|
||||
{
|
||||
u->inp_hook = inp_buff_hook;
|
||||
u->inp_buff = buf;
|
||||
u->inp_buff_end = buf + len;
|
||||
inp_init(u);
|
||||
}
|
||||
|
||||
#ifndef __UD_STANDALONE__
|
||||
/* =============================================================================
|
||||
* ud_input_set_file() - Set buffer as input.
|
||||
* =============================================================================
|
||||
*/
|
||||
extern void
|
||||
ud_set_input_file(register struct ud* u, FILE* f)
|
||||
{
|
||||
u->inp_hook = inp_file_hook;
|
||||
u->inp_file = f;
|
||||
inp_init(u);
|
||||
}
|
||||
#endif /* __UD_STANDALONE__ */
|
||||
|
||||
/* =============================================================================
|
||||
* ud_input_skip() - Skip n input bytes.
|
||||
* =============================================================================
|
||||
*/
|
||||
extern void
|
||||
ud_input_skip(struct ud* u, size_t n)
|
||||
{
|
||||
while (n--) {
|
||||
u->inp_hook(u);
|
||||
}
|
||||
}
|
||||
|
||||
/* =============================================================================
|
||||
* ud_input_end() - Test for end of input.
|
||||
* =============================================================================
|
||||
*/
|
||||
extern int
|
||||
ud_input_end(struct ud* u)
|
||||
{
|
||||
return (u->inp_curr == u->inp_fill) && u->inp_end;
|
||||
}
|
||||
|
||||
/* -----------------------------------------------------------------------------
|
||||
* inp_next() - Loads and returns the next byte from input.
|
||||
*
|
||||
* inp_curr and inp_fill are pointers to the cache. The program is written based
|
||||
* on the property that they are 8-bits in size, and will eventually wrap around
|
||||
* forming a circular buffer. So, the size of the cache is 256 in size, kind of
|
||||
* unnecessary yet optimized.
|
||||
*
|
||||
* A buffer inp_sess stores the bytes disassembled for a single session.
|
||||
* -----------------------------------------------------------------------------
|
||||
*/
|
||||
extern uint8_t inp_next(struct ud* u)
|
||||
{
|
||||
int c = -1;
|
||||
/* if current pointer is not upto the fill point in the
|
||||
* input cache.
|
||||
*/
|
||||
if ( u->inp_curr != u->inp_fill ) {
|
||||
c = u->inp_cache[ ++u->inp_curr ];
|
||||
/* if !end-of-input, call the input hook and get a byte */
|
||||
} else if ( u->inp_end || ( c = u->inp_hook( u ) ) == -1 ) {
|
||||
/* end-of-input, mark it as an error, since the decoder,
|
||||
* expected a byte more.
|
||||
*/
|
||||
u->error = 1;
|
||||
/* flag end of input */
|
||||
u->inp_end = 1;
|
||||
return 0;
|
||||
} else {
|
||||
/* increment pointers, we have a new byte. */
|
||||
u->inp_curr = ++u->inp_fill;
|
||||
/* add the byte to the cache */
|
||||
u->inp_cache[ u->inp_fill ] = (uint8_t)c;
|
||||
}
|
||||
/* record bytes input per decode-session. */
|
||||
u->inp_sess[ u->inp_ctr++ ] = (uint8_t)c;
|
||||
/* return byte */
|
||||
return ( uint8_t ) c;
|
||||
}
|
||||
|
||||
/* -----------------------------------------------------------------------------
|
||||
* inp_back() - Move back a single byte in the stream.
|
||||
* -----------------------------------------------------------------------------
|
||||
*/
|
||||
extern void
|
||||
inp_back(struct ud* u)
|
||||
{
|
||||
if ( u->inp_ctr > 0 ) {
|
||||
--u->inp_curr;
|
||||
--u->inp_ctr;
|
||||
}
|
||||
}
|
||||
|
||||
/* -----------------------------------------------------------------------------
|
||||
* inp_peek() - Peek into the next byte in source.
|
||||
* -----------------------------------------------------------------------------
|
||||
*/
|
||||
extern uint8_t
|
||||
inp_peek(struct ud* u)
|
||||
{
|
||||
uint8_t r = inp_next(u);
|
||||
if ( !u->error ) inp_back(u); /* Don't backup if there was an error */
|
||||
return r;
|
||||
}
|
||||
|
||||
/* -----------------------------------------------------------------------------
|
||||
* inp_move() - Move ahead n input bytes.
|
||||
* -----------------------------------------------------------------------------
|
||||
*/
|
||||
extern void
|
||||
inp_move(struct ud* u, size_t n)
|
||||
{
|
||||
while (n--)
|
||||
inp_next(u);
|
||||
}
|
||||
|
||||
/*------------------------------------------------------------------------------
|
||||
* inp_uintN() - return uintN from source.
|
||||
*------------------------------------------------------------------------------
|
||||
*/
|
||||
extern uint8_t
|
||||
inp_uint8(struct ud* u)
|
||||
{
|
||||
return inp_next(u);
|
||||
}
|
||||
|
||||
extern uint16_t
|
||||
inp_uint16(struct ud* u)
|
||||
{
|
||||
uint16_t r, ret;
|
||||
|
||||
ret = inp_next(u);
|
||||
r = inp_next(u);
|
||||
return ret | (r << 8);
|
||||
}
|
||||
|
||||
extern uint32_t
|
||||
inp_uint32(struct ud* u)
|
||||
{
|
||||
uint32_t r, ret;
|
||||
|
||||
ret = inp_next(u);
|
||||
r = inp_next(u);
|
||||
ret = ret | (r << 8);
|
||||
r = inp_next(u);
|
||||
ret = ret | (r << 16);
|
||||
r = inp_next(u);
|
||||
return ret | (r << 24);
|
||||
}
|
||||
|
||||
extern uint64_t
|
||||
inp_uint64(struct ud* u)
|
||||
{
|
||||
uint64_t r, ret;
|
||||
|
||||
ret = inp_next(u);
|
||||
r = inp_next(u);
|
||||
ret = ret | (r << 8);
|
||||
r = inp_next(u);
|
||||
ret = ret | (r << 16);
|
||||
r = inp_next(u);
|
||||
ret = ret | (r << 24);
|
||||
r = inp_next(u);
|
||||
ret = ret | (r << 32);
|
||||
r = inp_next(u);
|
||||
ret = ret | (r << 40);
|
||||
r = inp_next(u);
|
||||
ret = ret | (r << 48);
|
||||
r = inp_next(u);
|
||||
return ret | (r << 56);
|
||||
}
|
49
third-party/libudis86/input.h
vendored
Normal file
49
third-party/libudis86/input.h
vendored
Normal file
@@ -0,0 +1,49 @@
|
||||
/* -----------------------------------------------------------------------------
|
||||
* input.h
|
||||
*
|
||||
* Copyright (c) 2006, Vivek Mohan <vivek@sig9.com>
|
||||
* All rights reserved. See LICENSE
|
||||
* -----------------------------------------------------------------------------
|
||||
*/
|
||||
#ifndef UD_INPUT_H
|
||||
#define UD_INPUT_H
|
||||
|
||||
#include "types.h"
|
||||
|
||||
uint8_t inp_next(struct ud*);
|
||||
uint8_t inp_peek(struct ud*);
|
||||
uint8_t inp_uint8(struct ud*);
|
||||
uint16_t inp_uint16(struct ud*);
|
||||
uint32_t inp_uint32(struct ud*);
|
||||
uint64_t inp_uint64(struct ud*);
|
||||
void inp_move(struct ud*, size_t);
|
||||
void inp_back(struct ud*);
|
||||
|
||||
/* inp_init() - Initializes the input system. */
|
||||
#define inp_init(u) \
|
||||
do { \
|
||||
u->inp_curr = 0; \
|
||||
u->inp_fill = 0; \
|
||||
u->inp_ctr = 0; \
|
||||
u->inp_end = 0; \
|
||||
} while (0)
|
||||
|
||||
/* inp_start() - Should be called before each de-code operation. */
|
||||
#define inp_start(u) u->inp_ctr = 0
|
||||
|
||||
/* inp_back() - Resets the current pointer to its position before the current
|
||||
* instruction disassembly was started.
|
||||
*/
|
||||
#define inp_reset(u) \
|
||||
do { \
|
||||
u->inp_curr -= u->inp_ctr; \
|
||||
u->inp_ctr = 0; \
|
||||
} while (0)
|
||||
|
||||
/* inp_sess() - Returns the pointer to current session. */
|
||||
#define inp_sess(u) (u->inp_sess)
|
||||
|
||||
/* inp_cur() - Returns the current input byte. */
|
||||
#define inp_curr(u) ((u)->inp_cache[(u)->inp_curr])
|
||||
|
||||
#endif
|
4388
third-party/libudis86/itab.c
vendored
Normal file
4388
third-party/libudis86/itab.c
vendored
Normal file
File diff suppressed because it is too large
Load Diff
822
third-party/libudis86/itab.h
vendored
Normal file
822
third-party/libudis86/itab.h
vendored
Normal file
@@ -0,0 +1,822 @@
|
||||
|
||||
/* itab.h -- auto generated by opgen.py, do not edit. */
|
||||
|
||||
#ifndef UD_ITAB_H
|
||||
#define UD_ITAB_H
|
||||
|
||||
|
||||
|
||||
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_02__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_02__MOD__OP_01__RM,
|
||||
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_78__MODE,
|
||||
ITAB__0F__OP_79__MODE,
|
||||
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_B9__REG,
|
||||
ITAB__0F__OP_BA__REG,
|
||||
ITAB__0F__OP_C7__REG,
|
||||
ITAB__0F__OP_C7__REG__OP_06__VENDOR,
|
||||
ITAB__0F__OP_C7__REG__OP_07__VENDOR,
|
||||
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_SSE38,
|
||||
ITAB__PFX_SSE3A,
|
||||
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_06__VENDOR,
|
||||
ITAB__PFX_SSE66__SSE38,
|
||||
ITAB__PFX_SSE66__SSE3A,
|
||||
ITAB__PFX_SSEF2__0F,
|
||||
ITAB__PFX_SSEF2__SSE38,
|
||||
ITAB__PFX_SSEF3__0F,
|
||||
ITAB__PFX_SSEF3__0F__OP_C7__REG,
|
||||
ITAB__PFX_SSEF3__0F__OP_C7__REG__OP_07__VENDOR
|
||||
};
|
||||
|
||||
|
||||
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_Ifnclex,
|
||||
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_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_Igetsec,
|
||||
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_Imaskmovdqu,
|
||||
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_Ipaddd,
|
||||
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_Ipopcnt,
|
||||
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_Iud0,
|
||||
UD_Iud1,
|
||||
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_Ivmread,
|
||||
UD_Ivmwrite,
|
||||
UD_Ivmxoff,
|
||||
UD_Ivmrun,
|
||||
UD_Ivmmcall,
|
||||
UD_Ivmload,
|
||||
UD_Ivmsave,
|
||||
UD_Iwait,
|
||||
UD_Iwbinvd,
|
||||
UD_Iwrmsr,
|
||||
UD_Ixadd,
|
||||
UD_Ixchg,
|
||||
UD_Ixgetbv,
|
||||
UD_Ixsetbv,
|
||||
UD_Ixrstor,
|
||||
UD_Ixsaveopt,
|
||||
UD_Ixsave,
|
||||
UD_Ixlatb,
|
||||
UD_Ixor,
|
||||
UD_Ixorpd,
|
||||
UD_Ixorps,
|
||||
UD_Ipshufb,
|
||||
UD_Iphaddw,
|
||||
UD_Iphaddd,
|
||||
UD_Iphaddsw,
|
||||
UD_Ipmaddubsw,
|
||||
UD_Iphsubw,
|
||||
UD_Iphsubd,
|
||||
UD_Iphsubsw,
|
||||
UD_Iroundps,
|
||||
UD_Ipsignb,
|
||||
UD_Iroundpd,
|
||||
UD_Ipsignw,
|
||||
UD_Iroundss,
|
||||
UD_Ipsignd,
|
||||
UD_Iroundsd,
|
||||
UD_Ipmulhrsw,
|
||||
UD_Iblendps,
|
||||
UD_Iblendpd,
|
||||
UD_Ipblendw,
|
||||
UD_Ipalignr,
|
||||
UD_Ipblendvb,
|
||||
UD_Iblendvps,
|
||||
UD_Ipextrb,
|
||||
UD_Iblendvpd,
|
||||
UD_Ipextrd,
|
||||
UD_Iextractps,
|
||||
UD_Iptest,
|
||||
UD_Ipabsb,
|
||||
UD_Ipabsw,
|
||||
UD_Ipabsd,
|
||||
UD_Ipmovsxbw,
|
||||
UD_Ipinsrb,
|
||||
UD_Ipmovsxbd,
|
||||
UD_Iinsertps,
|
||||
UD_Ipmovsxbq,
|
||||
UD_Ipinsrd,
|
||||
UD_Ipmovsxwd,
|
||||
UD_Ipmovsxwq,
|
||||
UD_Ipmovsxdq,
|
||||
UD_Ipmuldq,
|
||||
UD_Ipcmpeqq,
|
||||
UD_Imovntdqa,
|
||||
UD_Ipackusdw,
|
||||
UD_Ipmovzxbw,
|
||||
UD_Ipmovzxbd,
|
||||
UD_Ipmovzxbq,
|
||||
UD_Ipmovzxwd,
|
||||
UD_Ipmovzxwq,
|
||||
UD_Ipmovzxdq,
|
||||
UD_Ipcmpgtq,
|
||||
UD_Ipminsb,
|
||||
UD_Ipminsd,
|
||||
UD_Ipminuw,
|
||||
UD_Ipminud,
|
||||
UD_Ipmaxsb,
|
||||
UD_Ipmaxsd,
|
||||
UD_Ipmaxuw,
|
||||
UD_Ipmaxud,
|
||||
UD_Ipmulld,
|
||||
UD_Idpps,
|
||||
UD_Iphminposuw,
|
||||
UD_Idppd,
|
||||
UD_Impsadbw,
|
||||
UD_Ipclmulqdq,
|
||||
UD_Ipcmpestrm,
|
||||
UD_Ipcmpestri,
|
||||
UD_Ipcmpistrm,
|
||||
UD_Ipcmpistri,
|
||||
UD_Iinvept,
|
||||
UD_Iinvvpid,
|
||||
UD_Iaesimc,
|
||||
UD_Iaesenc,
|
||||
UD_Iaesenclast,
|
||||
UD_Iaesdec,
|
||||
UD_Iaesdeclast,
|
||||
UD_Iaeskeygenassist,
|
||||
UD_Imovbe,
|
||||
UD_Icrc32,
|
||||
UD_Imovntsd,
|
||||
UD_Imovntss,
|
||||
UD_Itzcnt,
|
||||
UD_Ilzcnt,
|
||||
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,
|
||||
};
|
||||
|
||||
|
||||
|
||||
extern const struct ud_itab_entry *const ud_itab_list[];
|
||||
|
||||
#endif
|
323
third-party/libudis86/libudis86.vcproj
vendored
Normal file
323
third-party/libudis86/libudis86.vcproj
vendored
Normal file
@@ -0,0 +1,323 @@
|
||||
<?xml version="1.0" encoding="Windows-1252"?>
|
||||
<VisualStudioProject
|
||||
ProjectType="Visual C++"
|
||||
Version="9.00"
|
||||
Name="libudis86"
|
||||
ProjectGUID="{F9848187-D693-4DB4-B8C2-407165AE5299}"
|
||||
RootNamespace="libudis86"
|
||||
Keyword="Win32Proj"
|
||||
TargetFrameworkVersion="196613"
|
||||
>
|
||||
<Platforms>
|
||||
<Platform
|
||||
Name="Win32"
|
||||
/>
|
||||
<Platform
|
||||
Name="x64"
|
||||
/>
|
||||
</Platforms>
|
||||
<ToolFiles>
|
||||
</ToolFiles>
|
||||
<Configurations>
|
||||
<Configuration
|
||||
Name="Debug|Win32"
|
||||
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
|
||||
IntermediateDirectory="$(ConfigurationName)"
|
||||
ConfigurationType="4"
|
||||
CharacterSet="1"
|
||||
>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="0"
|
||||
PreprocessorDefinitions="WIN32;_DEBUG;_LIB"
|
||||
MinimalRebuild="true"
|
||||
BasicRuntimeChecks="3"
|
||||
RuntimeLibrary="3"
|
||||
UsePrecompiledHeader="0"
|
||||
WarningLevel="3"
|
||||
DebugInformationFormat="4"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManagedResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCLibrarianTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCALinkTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXDCMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCBscMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCFxCopTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"
|
||||
/>
|
||||
</Configuration>
|
||||
<Configuration
|
||||
Name="Release|Win32"
|
||||
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
|
||||
IntermediateDirectory="$(ConfigurationName)"
|
||||
ConfigurationType="4"
|
||||
CharacterSet="1"
|
||||
WholeProgramOptimization="1"
|
||||
>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="2"
|
||||
EnableIntrinsicFunctions="true"
|
||||
PreprocessorDefinitions="WIN32;NDEBUG;_LIB"
|
||||
RuntimeLibrary="2"
|
||||
EnableFunctionLevelLinking="true"
|
||||
UsePrecompiledHeader="0"
|
||||
WarningLevel="3"
|
||||
DebugInformationFormat="3"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManagedResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCLibrarianTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCALinkTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXDCMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCBscMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCFxCopTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"
|
||||
/>
|
||||
</Configuration>
|
||||
<Configuration
|
||||
Name="Debug|x64"
|
||||
OutputDirectory="$(SolutionDir)$(PlatformName)\$(ConfigurationName)"
|
||||
IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
|
||||
ConfigurationType="4"
|
||||
CharacterSet="1"
|
||||
>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"
|
||||
TargetEnvironment="3"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="0"
|
||||
PreprocessorDefinitions="WIN32;_DEBUG;_LIB"
|
||||
MinimalRebuild="true"
|
||||
BasicRuntimeChecks="3"
|
||||
RuntimeLibrary="3"
|
||||
UsePrecompiledHeader="0"
|
||||
WarningLevel="3"
|
||||
DebugInformationFormat="3"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManagedResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCLibrarianTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCALinkTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXDCMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCBscMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCFxCopTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"
|
||||
/>
|
||||
</Configuration>
|
||||
<Configuration
|
||||
Name="Release|x64"
|
||||
OutputDirectory="$(SolutionDir)$(PlatformName)\$(ConfigurationName)"
|
||||
IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
|
||||
ConfigurationType="4"
|
||||
CharacterSet="1"
|
||||
WholeProgramOptimization="1"
|
||||
>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"
|
||||
TargetEnvironment="3"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="2"
|
||||
EnableIntrinsicFunctions="true"
|
||||
PreprocessorDefinitions="WIN32;NDEBUG;_LIB"
|
||||
RuntimeLibrary="2"
|
||||
EnableFunctionLevelLinking="true"
|
||||
UsePrecompiledHeader="0"
|
||||
WarningLevel="3"
|
||||
DebugInformationFormat="3"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManagedResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCLibrarianTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCALinkTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXDCMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCBscMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCFxCopTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"
|
||||
/>
|
||||
</Configuration>
|
||||
</Configurations>
|
||||
<References>
|
||||
</References>
|
||||
<Files>
|
||||
<Filter
|
||||
Name="Source Files"
|
||||
Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
|
||||
UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
|
||||
>
|
||||
<File
|
||||
RelativePath=".\decode.c"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\input.c"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\itab.c"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\mnem.c"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\syn-intel.c"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\syn.c"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\udis86.c"
|
||||
>
|
||||
</File>
|
||||
</Filter>
|
||||
<Filter
|
||||
Name="Header Files"
|
||||
Filter="h;hpp;hxx;hm;inl;inc;xsd"
|
||||
UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
|
||||
>
|
||||
</Filter>
|
||||
<Filter
|
||||
Name="Resource Files"
|
||||
Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
|
||||
UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
|
||||
>
|
||||
</Filter>
|
||||
</Files>
|
||||
<Globals>
|
||||
</Globals>
|
||||
</VisualStudioProject>
|
660
third-party/libudis86/mnem.c
vendored
Normal file
660
third-party/libudis86/mnem.c
vendored
Normal file
@@ -0,0 +1,660 @@
|
||||
#include "mnem.h"
|
||||
|
||||
const char *const ud_mnemonics_str[] = {
|
||||
"3dnow",
|
||||
"aaa",
|
||||
"aad",
|
||||
"aam",
|
||||
"aas",
|
||||
"adc",
|
||||
"add",
|
||||
"addpd",
|
||||
"addps",
|
||||
"addsd",
|
||||
"addss",
|
||||
"addsubpd",
|
||||
"addsubps",
|
||||
"and",
|
||||
"andpd",
|
||||
"andps",
|
||||
"andnpd",
|
||||
"andnps",
|
||||
"arpl",
|
||||
"movsxd",
|
||||
"bound",
|
||||
"bsf",
|
||||
"bsr",
|
||||
"bswap",
|
||||
"bt",
|
||||
"btc",
|
||||
"btr",
|
||||
"bts",
|
||||
"call",
|
||||
"cbw",
|
||||
"cwde",
|
||||
"cdqe",
|
||||
"clc",
|
||||
"cld",
|
||||
"clflush",
|
||||
"clgi",
|
||||
"cli",
|
||||
"clts",
|
||||
"cmc",
|
||||
"cmovo",
|
||||
"cmovno",
|
||||
"cmovb",
|
||||
"cmovae",
|
||||
"cmovz",
|
||||
"cmovnz",
|
||||
"cmovbe",
|
||||
"cmova",
|
||||
"cmovs",
|
||||
"cmovns",
|
||||
"cmovp",
|
||||
"cmovnp",
|
||||
"cmovl",
|
||||
"cmovge",
|
||||
"cmovle",
|
||||
"cmovg",
|
||||
"cmp",
|
||||
"cmppd",
|
||||
"cmpps",
|
||||
"cmpsb",
|
||||
"cmpsw",
|
||||
"cmpsd",
|
||||
"cmpsq",
|
||||
"cmpss",
|
||||
"cmpxchg",
|
||||
"cmpxchg8b",
|
||||
"comisd",
|
||||
"comiss",
|
||||
"cpuid",
|
||||
"cvtdq2pd",
|
||||
"cvtdq2ps",
|
||||
"cvtpd2dq",
|
||||
"cvtpd2pi",
|
||||
"cvtpd2ps",
|
||||
"cvtpi2ps",
|
||||
"cvtpi2pd",
|
||||
"cvtps2dq",
|
||||
"cvtps2pi",
|
||||
"cvtps2pd",
|
||||
"cvtsd2si",
|
||||
"cvtsd2ss",
|
||||
"cvtsi2ss",
|
||||
"cvtss2si",
|
||||
"cvtss2sd",
|
||||
"cvttpd2pi",
|
||||
"cvttpd2dq",
|
||||
"cvttps2dq",
|
||||
"cvttps2pi",
|
||||
"cvttsd2si",
|
||||
"cvtsi2sd",
|
||||
"cvttss2si",
|
||||
"cwd",
|
||||
"cdq",
|
||||
"cqo",
|
||||
"daa",
|
||||
"das",
|
||||
"dec",
|
||||
"div",
|
||||
"divpd",
|
||||
"divps",
|
||||
"divsd",
|
||||
"divss",
|
||||
"emms",
|
||||
"enter",
|
||||
"f2xm1",
|
||||
"fabs",
|
||||
"fadd",
|
||||
"faddp",
|
||||
"fbld",
|
||||
"fbstp",
|
||||
"fchs",
|
||||
"fnclex",
|
||||
"fcmovb",
|
||||
"fcmove",
|
||||
"fcmovbe",
|
||||
"fcmovu",
|
||||
"fcmovnb",
|
||||
"fcmovne",
|
||||
"fcmovnbe",
|
||||
"fcmovnu",
|
||||
"fucomi",
|
||||
"fcom",
|
||||
"fcom2",
|
||||
"fcomp3",
|
||||
"fcomi",
|
||||
"fucomip",
|
||||
"fcomip",
|
||||
"fcomp",
|
||||
"fcomp5",
|
||||
"fcompp",
|
||||
"fcos",
|
||||
"fdecstp",
|
||||
"fdiv",
|
||||
"fdivp",
|
||||
"fdivr",
|
||||
"fdivrp",
|
||||
"femms",
|
||||
"ffree",
|
||||
"ffreep",
|
||||
"ficom",
|
||||
"ficomp",
|
||||
"fild",
|
||||
"fincstp",
|
||||
"fninit",
|
||||
"fiadd",
|
||||
"fidivr",
|
||||
"fidiv",
|
||||
"fisub",
|
||||
"fisubr",
|
||||
"fist",
|
||||
"fistp",
|
||||
"fisttp",
|
||||
"fld",
|
||||
"fld1",
|
||||
"fldl2t",
|
||||
"fldl2e",
|
||||
"fldpi",
|
||||
"fldlg2",
|
||||
"fldln2",
|
||||
"fldz",
|
||||
"fldcw",
|
||||
"fldenv",
|
||||
"fmul",
|
||||
"fmulp",
|
||||
"fimul",
|
||||
"fnop",
|
||||
"fpatan",
|
||||
"fprem",
|
||||
"fprem1",
|
||||
"fptan",
|
||||
"frndint",
|
||||
"frstor",
|
||||
"fnsave",
|
||||
"fscale",
|
||||
"fsin",
|
||||
"fsincos",
|
||||
"fsqrt",
|
||||
"fstp",
|
||||
"fstp1",
|
||||
"fstp8",
|
||||
"fstp9",
|
||||
"fst",
|
||||
"fnstcw",
|
||||
"fnstenv",
|
||||
"fnstsw",
|
||||
"fsub",
|
||||
"fsubp",
|
||||
"fsubr",
|
||||
"fsubrp",
|
||||
"ftst",
|
||||
"fucom",
|
||||
"fucomp",
|
||||
"fucompp",
|
||||
"fxam",
|
||||
"fxch",
|
||||
"fxch4",
|
||||
"fxch7",
|
||||
"fxrstor",
|
||||
"fxsave",
|
||||
"fxtract",
|
||||
"fyl2x",
|
||||
"fyl2xp1",
|
||||
"getsec",
|
||||
"haddpd",
|
||||
"haddps",
|
||||
"hlt",
|
||||
"hsubpd",
|
||||
"hsubps",
|
||||
"idiv",
|
||||
"in",
|
||||
"imul",
|
||||
"inc",
|
||||
"insb",
|
||||
"insw",
|
||||
"insd",
|
||||
"int1",
|
||||
"int3",
|
||||
"int",
|
||||
"into",
|
||||
"invd",
|
||||
"invlpg",
|
||||
"invlpga",
|
||||
"iretw",
|
||||
"iretd",
|
||||
"iretq",
|
||||
"jo",
|
||||
"jno",
|
||||
"jb",
|
||||
"jae",
|
||||
"jz",
|
||||
"jnz",
|
||||
"jbe",
|
||||
"ja",
|
||||
"js",
|
||||
"jns",
|
||||
"jp",
|
||||
"jnp",
|
||||
"jl",
|
||||
"jge",
|
||||
"jle",
|
||||
"jg",
|
||||
"jcxz",
|
||||
"jecxz",
|
||||
"jrcxz",
|
||||
"jmp",
|
||||
"lahf",
|
||||
"lar",
|
||||
"lddqu",
|
||||
"ldmxcsr",
|
||||
"lds",
|
||||
"lea",
|
||||
"les",
|
||||
"lfs",
|
||||
"lgs",
|
||||
"lidt",
|
||||
"lss",
|
||||
"leave",
|
||||
"lfence",
|
||||
"lgdt",
|
||||
"lldt",
|
||||
"lmsw",
|
||||
"lock",
|
||||
"lodsb",
|
||||
"lodsw",
|
||||
"lodsd",
|
||||
"lodsq",
|
||||
"loopnz",
|
||||
"loope",
|
||||
"loop",
|
||||
"lsl",
|
||||
"ltr",
|
||||
"maskmovq",
|
||||
"maskmovdqu",
|
||||
"maxpd",
|
||||
"maxps",
|
||||
"maxsd",
|
||||
"maxss",
|
||||
"mfence",
|
||||
"minpd",
|
||||
"minps",
|
||||
"minsd",
|
||||
"minss",
|
||||
"monitor",
|
||||
"mov",
|
||||
"movapd",
|
||||
"movaps",
|
||||
"movd",
|
||||
"movddup",
|
||||
"movdqa",
|
||||
"movdqu",
|
||||
"movdq2q",
|
||||
"movhpd",
|
||||
"movhps",
|
||||
"movlhps",
|
||||
"movlpd",
|
||||
"movlps",
|
||||
"movhlps",
|
||||
"movmskpd",
|
||||
"movmskps",
|
||||
"movntdq",
|
||||
"movnti",
|
||||
"movntpd",
|
||||
"movntps",
|
||||
"movntq",
|
||||
"movq",
|
||||
"movdqa",
|
||||
"movq2dq",
|
||||
"movsb",
|
||||
"movsw",
|
||||
"movsd",
|
||||
"movsq",
|
||||
"movsldup",
|
||||
"movshdup",
|
||||
"movss",
|
||||
"movsx",
|
||||
"movupd",
|
||||
"movups",
|
||||
"movzx",
|
||||
"mul",
|
||||
"mulpd",
|
||||
"mulps",
|
||||
"mulsd",
|
||||
"mulss",
|
||||
"mwait",
|
||||
"neg",
|
||||
"nop",
|
||||
"not",
|
||||
"or",
|
||||
"orpd",
|
||||
"orps",
|
||||
"out",
|
||||
"outsb",
|
||||
"outsw",
|
||||
"outsd",
|
||||
"outsq",
|
||||
"packsswb",
|
||||
"packssdw",
|
||||
"packuswb",
|
||||
"paddb",
|
||||
"paddw",
|
||||
"paddd",
|
||||
"paddq",
|
||||
"paddsb",
|
||||
"paddsw",
|
||||
"paddusb",
|
||||
"paddusw",
|
||||
"pand",
|
||||
"pandn",
|
||||
"pause",
|
||||
"pavgb",
|
||||
"pavgw",
|
||||
"pcmpeqb",
|
||||
"pcmpeqw",
|
||||
"pcmpeqd",
|
||||
"pcmpgtb",
|
||||
"pcmpgtw",
|
||||
"pcmpgtd",
|
||||
"pextrw",
|
||||
"pinsrw",
|
||||
"pmaddwd",
|
||||
"pmaxsw",
|
||||
"pmaxub",
|
||||
"pminsw",
|
||||
"pminub",
|
||||
"pmovmskb",
|
||||
"pmulhuw",
|
||||
"pmulhw",
|
||||
"pmullw",
|
||||
"pmuludq",
|
||||
"pop",
|
||||
"popa",
|
||||
"popad",
|
||||
"popcnt",
|
||||
"popfw",
|
||||
"popfd",
|
||||
"popfq",
|
||||
"por",
|
||||
"prefetch",
|
||||
"prefetchnta",
|
||||
"prefetcht0",
|
||||
"prefetcht1",
|
||||
"prefetcht2",
|
||||
"psadbw",
|
||||
"pshufd",
|
||||
"pshufhw",
|
||||
"pshuflw",
|
||||
"pshufw",
|
||||
"pslldq",
|
||||
"psllw",
|
||||
"pslld",
|
||||
"psllq",
|
||||
"psraw",
|
||||
"psrad",
|
||||
"psrlw",
|
||||
"psrld",
|
||||
"psrlq",
|
||||
"psrldq",
|
||||
"psubb",
|
||||
"psubw",
|
||||
"psubd",
|
||||
"psubq",
|
||||
"psubsb",
|
||||
"psubsw",
|
||||
"psubusb",
|
||||
"psubusw",
|
||||
"punpckhbw",
|
||||
"punpckhwd",
|
||||
"punpckhdq",
|
||||
"punpckhqdq",
|
||||
"punpcklbw",
|
||||
"punpcklwd",
|
||||
"punpckldq",
|
||||
"punpcklqdq",
|
||||
"pi2fw",
|
||||
"pi2fd",
|
||||
"pf2iw",
|
||||
"pf2id",
|
||||
"pfnacc",
|
||||
"pfpnacc",
|
||||
"pfcmpge",
|
||||
"pfmin",
|
||||
"pfrcp",
|
||||
"pfrsqrt",
|
||||
"pfsub",
|
||||
"pfadd",
|
||||
"pfcmpgt",
|
||||
"pfmax",
|
||||
"pfrcpit1",
|
||||
"pfrspit1",
|
||||
"pfsubr",
|
||||
"pfacc",
|
||||
"pfcmpeq",
|
||||
"pfmul",
|
||||
"pfrcpit2",
|
||||
"pmulhrw",
|
||||
"pswapd",
|
||||
"pavgusb",
|
||||
"push",
|
||||
"pusha",
|
||||
"pushad",
|
||||
"pushfw",
|
||||
"pushfd",
|
||||
"pushfq",
|
||||
"pxor",
|
||||
"rcl",
|
||||
"rcr",
|
||||
"rol",
|
||||
"ror",
|
||||
"rcpps",
|
||||
"rcpss",
|
||||
"rdmsr",
|
||||
"rdpmc",
|
||||
"rdtsc",
|
||||
"rdtscp",
|
||||
"repne",
|
||||
"rep",
|
||||
"ret",
|
||||
"retf",
|
||||
"rsm",
|
||||
"rsqrtps",
|
||||
"rsqrtss",
|
||||
"sahf",
|
||||
"sal",
|
||||
"salc",
|
||||
"sar",
|
||||
"shl",
|
||||
"shr",
|
||||
"sbb",
|
||||
"scasb",
|
||||
"scasw",
|
||||
"scasd",
|
||||
"scasq",
|
||||
"seto",
|
||||
"setno",
|
||||
"setb",
|
||||
"setnb",
|
||||
"setz",
|
||||
"setnz",
|
||||
"setbe",
|
||||
"seta",
|
||||
"sets",
|
||||
"setns",
|
||||
"setp",
|
||||
"setnp",
|
||||
"setl",
|
||||
"setge",
|
||||
"setle",
|
||||
"setg",
|
||||
"sfence",
|
||||
"sgdt",
|
||||
"shld",
|
||||
"shrd",
|
||||
"shufpd",
|
||||
"shufps",
|
||||
"sidt",
|
||||
"sldt",
|
||||
"smsw",
|
||||
"sqrtps",
|
||||
"sqrtpd",
|
||||
"sqrtsd",
|
||||
"sqrtss",
|
||||
"stc",
|
||||
"std",
|
||||
"stgi",
|
||||
"sti",
|
||||
"skinit",
|
||||
"stmxcsr",
|
||||
"stosb",
|
||||
"stosw",
|
||||
"stosd",
|
||||
"stosq",
|
||||
"str",
|
||||
"sub",
|
||||
"subpd",
|
||||
"subps",
|
||||
"subsd",
|
||||
"subss",
|
||||
"swapgs",
|
||||
"syscall",
|
||||
"sysenter",
|
||||
"sysexit",
|
||||
"sysret",
|
||||
"test",
|
||||
"ucomisd",
|
||||
"ucomiss",
|
||||
"ud0",
|
||||
"ud1",
|
||||
"ud2",
|
||||
"unpckhpd",
|
||||
"unpckhps",
|
||||
"unpcklps",
|
||||
"unpcklpd",
|
||||
"verr",
|
||||
"verw",
|
||||
"vmcall",
|
||||
"vmclear",
|
||||
"vmxon",
|
||||
"vmptrld",
|
||||
"vmptrst",
|
||||
"vmlaunch",
|
||||
"vmresume",
|
||||
"vmread",
|
||||
"vmwrite",
|
||||
"vmxoff",
|
||||
"vmrun",
|
||||
"vmmcall",
|
||||
"vmload",
|
||||
"vmsave",
|
||||
"wait",
|
||||
"wbinvd",
|
||||
"wrmsr",
|
||||
"xadd",
|
||||
"xchg",
|
||||
"xgetbv",
|
||||
"xsetbv",
|
||||
"xrstor",
|
||||
"xsaveopt",
|
||||
"xsave",
|
||||
"xlatb",
|
||||
"xor",
|
||||
"xorpd",
|
||||
"xorps",
|
||||
"pshufb",
|
||||
"phaddw",
|
||||
"phaddd",
|
||||
"phaddsw",
|
||||
"pmaddubsw",
|
||||
"phsubw",
|
||||
"phsubd",
|
||||
"phsubsw",
|
||||
"roundps",
|
||||
"psignb",
|
||||
"roundpd",
|
||||
"psignw",
|
||||
"roundss",
|
||||
"psignd",
|
||||
"roundsd",
|
||||
"pmulhrsw",
|
||||
"blendps",
|
||||
"blendpd",
|
||||
"pblendw",
|
||||
"palignr",
|
||||
"pblendvb",
|
||||
"blendvps",
|
||||
"pextrb",
|
||||
"blendvpd",
|
||||
"pextrd",
|
||||
"extractps",
|
||||
"ptest",
|
||||
"pabsb",
|
||||
"pabsw",
|
||||
"pabsd",
|
||||
"pmovsxbw",
|
||||
"pinsrb",
|
||||
"pmovsxbd",
|
||||
"insertps",
|
||||
"pmovsxbq",
|
||||
"pinsrd",
|
||||
"pmovsxwd",
|
||||
"pmovsxwq",
|
||||
"pmovsxdq",
|
||||
"pmuldq",
|
||||
"pcmpeqq",
|
||||
"movntdqa",
|
||||
"packusdw",
|
||||
"pmovzxbw",
|
||||
"pmovzxbd",
|
||||
"pmovzxbq",
|
||||
"pmovzxwd",
|
||||
"pmovzxwq",
|
||||
"pmovzxdq",
|
||||
"pcmpgtq",
|
||||
"pminsb",
|
||||
"pminsd",
|
||||
"pminuw",
|
||||
"pminud",
|
||||
"pmaxsb",
|
||||
"pmaxsd",
|
||||
"pmaxuw",
|
||||
"pmaxud",
|
||||
"pmulld",
|
||||
"dpps",
|
||||
"phminposuw",
|
||||
"dppd",
|
||||
"mpsadbw",
|
||||
"pclmulqdq",
|
||||
"pcmpestrm",
|
||||
"pcmpestri",
|
||||
"pcmpistrm",
|
||||
"pcmpistri",
|
||||
"invept",
|
||||
"invvpid",
|
||||
"aesimc",
|
||||
"aesenc",
|
||||
"aesenclast",
|
||||
"aesdec",
|
||||
"aesdeclast",
|
||||
"aeskeygenassist",
|
||||
"movbe",
|
||||
"crc32",
|
||||
"movntsd",
|
||||
"movntss",
|
||||
"tzcnt",
|
||||
"lzcnt",
|
||||
"db",
|
||||
"invalid",
|
||||
};
|
||||
|
||||
|
||||
/* Looks up mnemonic code in the mnemonic string table
|
||||
* Returns NULL if the mnemonic code is invalid
|
||||
*/
|
||||
const char * ud_lookup_mnemonic( enum ud_mnemonic_code c )
|
||||
{
|
||||
if ( c < UD_Id3vil )
|
||||
return ud_mnemonics_str[ c ];
|
||||
return NULL;
|
||||
}
|
15
third-party/libudis86/mnem.h
vendored
Normal file
15
third-party/libudis86/mnem.h
vendored
Normal file
@@ -0,0 +1,15 @@
|
||||
#ifndef UD_MNEM_H
|
||||
#define UD_MNEM_H
|
||||
|
||||
#include "types.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
extern const char* ud_lookup_mnemonic(enum ud_mnemonic_code c);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif /* UD_MNEM_H */
|
10
third-party/libudis86/read.me
vendored
Normal file
10
third-party/libudis86/read.me
vendored
Normal file
@@ -0,0 +1,10 @@
|
||||
This is slightly modified libudis86 1.7 (from http://udis86.sourceforge.net/)
|
||||
I changed declaration of all tables to be const
|
||||
Also ssse3 & sse4 was added
|
||||
|
||||
You can build it
|
||||
1) under windows - with Visual Studion 2008 via libudis86.vcproj
|
||||
2) as static library for drivers - with WDK via Makefile & Sources
|
||||
3) as static Linux library with gcc - via Makefile.lnx
|
||||
|
||||
24 aug 2011: add support for lzcnt, movntsd & movntss
|
216
third-party/libudis86/syn-intel.c
vendored
Normal file
216
third-party/libudis86/syn-intel.c
vendored
Normal file
@@ -0,0 +1,216 @@
|
||||
/* -----------------------------------------------------------------------------
|
||||
* syn-intel.c
|
||||
*
|
||||
* Copyright (c) 2002, 2003, 2004 Vivek Mohan <vivek@sig9.com>
|
||||
* All rights reserved. See (LICENSE)
|
||||
* -----------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
#include "types.h"
|
||||
#include "extern.h"
|
||||
#include "decode.h"
|
||||
#include "mnem.h"
|
||||
#include "itab.h"
|
||||
#include "syn.h"
|
||||
|
||||
/* -----------------------------------------------------------------------------
|
||||
* opr_cast() - Prints an operand cast.
|
||||
* -----------------------------------------------------------------------------
|
||||
*/
|
||||
static void
|
||||
opr_cast(struct ud* u, struct ud_operand* op)
|
||||
{
|
||||
switch(op->size) {
|
||||
case 8: mkasm(u, "byte ptr " ); break;
|
||||
case 16: mkasm(u, "word ptr " ); break;
|
||||
case 32: mkasm(u, "dword ptr "); break;
|
||||
case 64: mkasm(u, "qword ptr "); break;
|
||||
case 80: mkasm(u, "tword ptr "); break;
|
||||
case 128: mkasm(u, "oword ptr "); break;
|
||||
default: break;
|
||||
}
|
||||
if (u->br_far)
|
||||
mkasm(u, "far ");
|
||||
else if (u->br_near)
|
||||
mkasm(u, "near ");
|
||||
}
|
||||
|
||||
/* -----------------------------------------------------------------------------
|
||||
* gen_operand() - Generates assembly output for each operand.
|
||||
* -----------------------------------------------------------------------------
|
||||
*/
|
||||
static void gen_operand(struct ud* u, struct ud_operand* op, int syn_cast)
|
||||
{
|
||||
switch(op->type) {
|
||||
case UD_OP_REG:
|
||||
mkasm(u, ud_reg_tab[op->base - UD_R_AL]);
|
||||
break;
|
||||
|
||||
case UD_OP_MEM: {
|
||||
|
||||
int op_f = 0;
|
||||
|
||||
if (syn_cast)
|
||||
opr_cast(u, op);
|
||||
|
||||
#if 1 /* Changed [es:eax] -> es:[eax]. To revert, set #if 0 */
|
||||
if (u->pfx_seg && u->mnemonic != UD_Ilea)
|
||||
mkasm(u, "%s:", ud_reg_tab[u->pfx_seg - UD_R_AL]);
|
||||
|
||||
mkasm(u, "[");
|
||||
#else
|
||||
mkasm(u, "[");
|
||||
|
||||
if (u->pfx_seg)
|
||||
mkasm(u, "%s:", ud_reg_tab[u->pfx_seg - UD_R_AL]);
|
||||
#endif
|
||||
if (op->base) {
|
||||
mkasm(u, "%s", ud_reg_tab[op->base - UD_R_AL]);
|
||||
op_f = 1;
|
||||
}
|
||||
|
||||
if (op->index) {
|
||||
if (op_f)
|
||||
mkasm(u, "+");
|
||||
mkasm(u, "%s", ud_reg_tab[op->index - UD_R_AL]);
|
||||
op_f = 1;
|
||||
}
|
||||
|
||||
if (op->scale)
|
||||
mkasm(u, "*%d", op->scale);
|
||||
|
||||
if (op->offset == 8) {
|
||||
if (op->lval.sbyte < 0)
|
||||
mkasm(u, "-0x%x", -op->lval.sbyte);
|
||||
else mkasm(u, "%s0x%x", (op_f) ? "+" : "", op->lval.sbyte);
|
||||
}
|
||||
else if (op->offset == 16)
|
||||
mkasm(u, "%s0x%x", (op_f) ? "+" : "", op->lval.uword);
|
||||
else if (op->offset == 32) {
|
||||
if (u->adr_mode == 64) {
|
||||
if (op->lval.sdword < 0)
|
||||
mkasm(u, "-0x%x", -op->lval.sdword);
|
||||
else mkasm(u, "%s0x%x", (op_f) ? "+" : "", op->lval.sdword);
|
||||
}
|
||||
else mkasm(u, "%s0x%lx", (op_f) ? "+" : "", op->lval.udword);
|
||||
}
|
||||
else if (op->offset == 64)
|
||||
mkasm(u, "%s0x" FMT64 "x", (op_f) ? "+" : "", op->lval.uqword);
|
||||
|
||||
mkasm(u, "]");
|
||||
break;
|
||||
}
|
||||
|
||||
case UD_OP_IMM:
|
||||
if (syn_cast) opr_cast(u, op);
|
||||
switch (op->size) {
|
||||
case 8: mkasm(u, "0x%x", op->lval.ubyte); break;
|
||||
case 16: mkasm(u, "0x%x", op->lval.uword); break;
|
||||
case 32: mkasm(u, "0x%lx", op->lval.udword); break;
|
||||
case 64: mkasm(u, "0x" FMT64 "x", op->lval.uqword); break;
|
||||
default: break;
|
||||
}
|
||||
break;
|
||||
|
||||
case UD_OP_JIMM:
|
||||
if (syn_cast) opr_cast(u, op);
|
||||
switch (op->size) {
|
||||
case 8:
|
||||
mkasm(u, "0x" FMT64 "x", u->pc + op->lval.sbyte);
|
||||
break;
|
||||
case 16:
|
||||
mkasm(u, "0x" FMT64 "x", u->pc + op->lval.sword);
|
||||
break;
|
||||
case 32:
|
||||
mkasm(u, "0x" FMT64 "x", u->pc + op->lval.sdword);
|
||||
break;
|
||||
default:break;
|
||||
}
|
||||
break;
|
||||
|
||||
case UD_OP_PTR:
|
||||
switch (op->size) {
|
||||
case 32:
|
||||
mkasm(u, "word 0x%x:0x%x", op->lval.ptr.seg,
|
||||
op->lval.ptr.off & 0xFFFF);
|
||||
break;
|
||||
case 48:
|
||||
mkasm(u, "dword 0x%x:0x%lx", op->lval.ptr.seg,
|
||||
op->lval.ptr.off);
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
case UD_OP_CONST:
|
||||
if (syn_cast) opr_cast(u, op);
|
||||
mkasm(u, "%.2x", op->lval.udword);
|
||||
break;
|
||||
|
||||
default: return;
|
||||
}
|
||||
}
|
||||
|
||||
/* =============================================================================
|
||||
* translates to intel syntax
|
||||
* =============================================================================
|
||||
*/
|
||||
extern void ud_translate_intel(struct ud* u)
|
||||
{
|
||||
/* -- prefixes -- */
|
||||
|
||||
/* check if P_OSO prefix is used */
|
||||
if (! P_OSO(u->itab_entry->prefix) && u->pfx_opr) {
|
||||
switch (u->dis_mode) {
|
||||
case 16:
|
||||
mkasm(u, "o32 ");
|
||||
break;
|
||||
case 32:
|
||||
case 64:
|
||||
mkasm(u, "o16 ");
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/* check if P_ASO prefix was used */
|
||||
if (! P_ASO(u->itab_entry->prefix) && u->pfx_adr) {
|
||||
switch (u->dis_mode) {
|
||||
case 16:
|
||||
mkasm(u, "a32 ");
|
||||
break;
|
||||
case 32:
|
||||
mkasm(u, "a16 ");
|
||||
break;
|
||||
case 64:
|
||||
mkasm(u, "a32 ");
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (u->pfx_lock)
|
||||
mkasm(u, "lock ");
|
||||
if (u->pfx_rep)
|
||||
mkasm(u, "rep ");
|
||||
if (u->pfx_repne)
|
||||
mkasm(u, "repne ");
|
||||
if (u->implicit_addr && u->pfx_seg)
|
||||
mkasm(u, "%s ", ud_reg_tab[u->pfx_seg - UD_R_AL]);
|
||||
|
||||
/* print the instruction mnemonic */
|
||||
mkasm(u, "%s ", ud_lookup_mnemonic(u->mnemonic));
|
||||
|
||||
/* operand 1 */
|
||||
if (u->operand[0].type != UD_NONE) {
|
||||
gen_operand(u, &u->operand[0], u->c1);
|
||||
}
|
||||
/* operand 2 */
|
||||
if (u->operand[1].type != UD_NONE) {
|
||||
mkasm(u, ", ");
|
||||
gen_operand(u, &u->operand[1], u->c2);
|
||||
}
|
||||
|
||||
/* operand 3 */
|
||||
if (u->operand[2].type != UD_NONE) {
|
||||
mkasm(u, ", ");
|
||||
gen_operand(u, &u->operand[2], u->c3);
|
||||
}
|
||||
}
|
61
third-party/libudis86/syn.c
vendored
Normal file
61
third-party/libudis86/syn.c
vendored
Normal file
@@ -0,0 +1,61 @@
|
||||
/* -----------------------------------------------------------------------------
|
||||
* syn.c
|
||||
*
|
||||
* Copyright (c) 2002, 2003, 2004 Vivek Mohan <vivek@sig9.com>
|
||||
* All rights reserved. See (LICENSE)
|
||||
* -----------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/* -----------------------------------------------------------------------------
|
||||
* Intel Register Table - Order Matters (types.h)!
|
||||
* -----------------------------------------------------------------------------
|
||||
*/
|
||||
const char * const ud_reg_tab[] =
|
||||
{
|
||||
"al", "cl", "dl", "bl",
|
||||
"ah", "ch", "dh", "bh",
|
||||
"spl", "bpl", "sil", "dil",
|
||||
"r8b", "r9b", "r10b", "r11b",
|
||||
"r12b", "r13b", "r14b", "r15b",
|
||||
|
||||
"ax", "cx", "dx", "bx",
|
||||
"sp", "bp", "si", "di",
|
||||
"r8w", "r9w", "r10w", "r11w",
|
||||
"r12w", "r13W" , "r14w", "r15w",
|
||||
|
||||
"eax", "ecx", "edx", "ebx",
|
||||
"esp", "ebp", "esi", "edi",
|
||||
"r8d", "r9d", "r10d", "r11d",
|
||||
"r12d", "r13d", "r14d", "r15d",
|
||||
|
||||
"rax", "rcx", "rdx", "rbx",
|
||||
"rsp", "rbp", "rsi", "rdi",
|
||||
"r8", "r9", "r10", "r11",
|
||||
"r12", "r13", "r14", "r15",
|
||||
|
||||
"es", "cs", "ss", "ds",
|
||||
"fs", "gs", "seg6", "seg7",
|
||||
|
||||
"cr0", "cr1", "cr2", "cr3",
|
||||
"cr4", "cr5", "cr6", "cr7",
|
||||
"cr8", "cr9", "cr10", "cr11",
|
||||
"cr12", "cr13", "cr14", "cr15",
|
||||
|
||||
"dr0", "dr1", "dr2", "dr3",
|
||||
"dr4", "dr5", "dr6", "dr7",
|
||||
"dr8", "dr9", "dr10", "dr11",
|
||||
"dr12", "dr13", "dr14", "dr15",
|
||||
|
||||
"mm0", "mm1", "mm2", "mm3",
|
||||
"mm4", "mm5", "mm6", "mm7",
|
||||
|
||||
"st0", "st1", "st2", "st3",
|
||||
"st4", "st5", "st6", "st7",
|
||||
|
||||
"xmm0", "xmm1", "xmm2", "xmm3",
|
||||
"xmm4", "xmm5", "xmm6", "xmm7",
|
||||
"xmm8", "xmm9", "xmm10", "xmm11",
|
||||
"xmm12", "xmm13", "xmm14", "xmm15",
|
||||
|
||||
"rip"
|
||||
};
|
25
third-party/libudis86/syn.h
vendored
Normal file
25
third-party/libudis86/syn.h
vendored
Normal file
@@ -0,0 +1,25 @@
|
||||
/* -----------------------------------------------------------------------------
|
||||
* syn.h
|
||||
*
|
||||
* Copyright (c) 2006, Vivek Mohan <vivek@sig9.com>
|
||||
* All rights reserved. See LICENSE
|
||||
* -----------------------------------------------------------------------------
|
||||
*/
|
||||
#ifndef UD_SYN_H
|
||||
#define UD_SYN_H
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdarg.h>
|
||||
#include "types.h"
|
||||
|
||||
extern const char* const 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);
|
||||
}
|
||||
|
||||
#endif
|
200
third-party/libudis86/types.h
vendored
Normal file
200
third-party/libudis86/types.h
vendored
Normal file
@@ -0,0 +1,200 @@
|
||||
/* -----------------------------------------------------------------------------
|
||||
* types.h
|
||||
*
|
||||
* Copyright (c) 2006, Vivek Mohan <vivek@sig9.com>
|
||||
* All rights reserved. See LICENSE
|
||||
* -----------------------------------------------------------------------------
|
||||
*/
|
||||
#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>
|
||||
#endif
|
||||
|
||||
#include "itab.h"
|
||||
|
||||
/* -----------------------------------------------------------------------------
|
||||
* 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, UD_R_SEG6, UD_R_SEG7,
|
||||
|
||||
/* 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
|
||||
};
|
||||
|
||||
/* -----------------------------------------------------------------------------
|
||||
* 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 - The udis86 object.
|
||||
* -----------------------------------------------------------------------------
|
||||
*/
|
||||
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];
|
||||
const struct ud_itab_entry * itab_entry;
|
||||
};
|
||||
|
||||
/* -----------------------------------------------------------------------------
|
||||
* 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 bail_out(ud,error_code) longjmp( (ud)->bailout, error_code )
|
||||
#define try_decode(ud) if ( setjmp( (ud)->bailout ) == 0 )
|
||||
#define catch_error() else
|
||||
|
||||
#endif
|
156
third-party/libudis86/udis86.c
vendored
Normal file
156
third-party/libudis86/udis86.c
vendored
Normal file
@@ -0,0 +1,156 @@
|
||||
/* -----------------------------------------------------------------------------
|
||||
* udis86.c
|
||||
*
|
||||
* Copyright (c) 2004, 2005, 2006, Vivek Mohan <vivek@sig9.com>
|
||||
* All rights reserved. See LICENSE
|
||||
* -----------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
#ifndef __BUILDMACHINE__
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#endif /* !__BUILDMACHINE__ */
|
||||
|
||||
#include "input.h"
|
||||
#include "extern.h"
|
||||
|
||||
/* =============================================================================
|
||||
* ud_init() - Initializes ud_t object.
|
||||
* =============================================================================
|
||||
*/
|
||||
extern void
|
||||
ud_init(struct ud* u)
|
||||
{
|
||||
memset((void*)u, 0, sizeof(struct ud));
|
||||
ud_set_mode(u, 16);
|
||||
u->mnemonic = UD_Iinvalid;
|
||||
ud_set_pc(u, 0);
|
||||
#ifndef __UD_STANDALONE__
|
||||
ud_set_input_file(u, stdin);
|
||||
#endif /* __UD_STANDALONE__ */
|
||||
}
|
||||
|
||||
/* =============================================================================
|
||||
* ud_disassemble() - disassembles one instruction and returns the number of
|
||||
* bytes disassembled. A zero means end of disassembly.
|
||||
* =============================================================================
|
||||
*/
|
||||
extern unsigned int
|
||||
ud_disassemble(struct ud* u)
|
||||
{
|
||||
if (ud_input_end(u))
|
||||
return 0;
|
||||
|
||||
|
||||
u->insn_buffer[0] = u->insn_hexcode[0] = 0;
|
||||
|
||||
|
||||
if (ud_decode(u) == 0)
|
||||
return 0;
|
||||
if (u->translator)
|
||||
u->translator(u);
|
||||
return ud_insn_len(u);
|
||||
}
|
||||
|
||||
/* =============================================================================
|
||||
* ud_set_mode() - Set Disassemly Mode.
|
||||
* =============================================================================
|
||||
*/
|
||||
extern void
|
||||
ud_set_mode(struct ud* u, uint8_t m)
|
||||
{
|
||||
switch(m) {
|
||||
case 16:
|
||||
case 32:
|
||||
case 64: u->dis_mode = m ; return;
|
||||
default: u->dis_mode = 16; return;
|
||||
}
|
||||
}
|
||||
|
||||
/* =============================================================================
|
||||
* ud_set_vendor() - Set vendor.
|
||||
* =============================================================================
|
||||
*/
|
||||
extern void
|
||||
ud_set_vendor(struct ud* u, unsigned v)
|
||||
{
|
||||
switch(v) {
|
||||
case UD_VENDOR_INTEL:
|
||||
u->vendor = (uint8_t)v;
|
||||
break;
|
||||
default:
|
||||
u->vendor = UD_VENDOR_AMD;
|
||||
}
|
||||
}
|
||||
|
||||
/* =============================================================================
|
||||
* ud_set_pc() - Sets code origin.
|
||||
* =============================================================================
|
||||
*/
|
||||
extern void
|
||||
ud_set_pc(struct ud* u, uint64_t o)
|
||||
{
|
||||
u->pc = o;
|
||||
}
|
||||
|
||||
/* =============================================================================
|
||||
* ud_set_syntax() - Sets the output syntax.
|
||||
* =============================================================================
|
||||
*/
|
||||
extern void
|
||||
ud_set_syntax(struct ud* u, void (*t)(struct ud*))
|
||||
{
|
||||
u->translator = t;
|
||||
}
|
||||
|
||||
/* =============================================================================
|
||||
* ud_insn() - returns the disassembled instruction
|
||||
* =============================================================================
|
||||
*/
|
||||
extern char*
|
||||
ud_insn_asm(struct ud* u)
|
||||
{
|
||||
return u->insn_buffer;
|
||||
}
|
||||
|
||||
/* =============================================================================
|
||||
* ud_insn_offset() - Returns the offset.
|
||||
* =============================================================================
|
||||
*/
|
||||
extern uint64_t
|
||||
ud_insn_off(struct ud* u)
|
||||
{
|
||||
return u->insn_offset;
|
||||
}
|
||||
|
||||
|
||||
/* =============================================================================
|
||||
* ud_insn_hex() - Returns hex form of disassembled instruction.
|
||||
* =============================================================================
|
||||
*/
|
||||
extern char*
|
||||
ud_insn_hex(struct ud* u)
|
||||
{
|
||||
return u->insn_hexcode;
|
||||
}
|
||||
|
||||
/* =============================================================================
|
||||
* ud_insn_ptr() - Returns code disassembled.
|
||||
* =============================================================================
|
||||
*/
|
||||
extern uint8_t*
|
||||
ud_insn_ptr(struct ud* u)
|
||||
{
|
||||
return u->inp_sess;
|
||||
}
|
||||
|
||||
/* =============================================================================
|
||||
* ud_insn_len() - Returns the count of bytes disassembled.
|
||||
* =============================================================================
|
||||
*/
|
||||
extern unsigned int
|
||||
ud_insn_len(struct ud* u)
|
||||
{
|
||||
return u->inp_ctr;
|
||||
}
|
Reference in New Issue
Block a user