ReactOS
0.4.15-dev-5606-gf34e425
disassembler.h
Go to the documentation of this file.
1
/* Operand and instruction types */
2
#define OP_REG 0x100
/* register */
3
#define OP_IMM 0x200
/* immediate value */
4
#define OP_IND 0x300
/* indirect memory reference */
5
#define OP_BPTR 0x400
/* BYTE Pointer */
6
#define OP_WPTR 0x500
/* WORD Pointer */
7
#define OP_DPTR 0x600
/* DWORD Pointer */
8
#define OP_UNK 0x900
9
//#define INS_INVALID 0x00 /* Not a valid instruction */
10
/* Branch Instruction types */
11
#define INS_BRANCH 0x01
/* Unconditional branch */
12
#define INS_COND 0x02
/* Conditional branch */
13
#define INS_SUB 0x04
/* Jump to subroutine */
14
#define INS_RET 0x08
/* Return from subroutine */
15
/* modify ( 'w' ) instructions */
16
#define INS_ARITH 0x10
/* Arithmetic inst */
17
#define INS_LOGIC 0x20
/* logical inst */
18
#define INS_FPU 0x40
/* Floating Point inst */
19
#define INS_FLAG 0x80
/* Modify flags */
20
/* misc Instruction Types */
21
#define INS_MOVE 0x0100
22
#define INS_ARRAY 0x0200
/* String and XLAT ops */
23
#define INS_PTR 0x0400
/* Load EA/pointer */
24
#define INS_STACK 0x1000
/* PUSH, POP, etc */
25
#define INS_FRAME 0x2000
/* ENTER, LEAVE, etc */
26
#define INS_SYSTEM 0x4000
/* CPUID, WBINVD, etc */
27
28
/* Other info */
29
#define BIG_ENDIAN_ORDER 0
30
#define LITTLE_ENDIAN_ORDER 1
31
32
struct
code
{
/* size 100 */
33
unsigned
long
rva
;
34
unsigned
short
flags
;
35
char
mnemonic
[16];
36
char
dest
[32];
37
char
src
[32];
38
char
aux
[32];
39
int
mnemType
;
40
int
destType
;
41
int
srcType
;
42
int
auxType
;
43
};
44
45
/* struct used in Init routine */
46
struct
CPU_TYPE
{
47
char
vendor
;
48
char
model
[12];
49
};
50
51
#define cpu_80386 0x01
52
#define cpu_80486 0x02
53
#define cpu_PENTIUM 0x04
54
#define cpu_PENTMMX 0x08
55
#define cpu_PENTPRO 0x10
56
#define cpu_PENTIUM2 0x20
57
#define cpu_PENTIUM3 0x40
58
#define cpu_PENTIUM4 0x80
59
60
#define FLAGS_MODRM 0x00001 //contains mod r/m byte
61
#define FLAGS_8BIT 0x00002 //force 8-bit arguments
62
#define FLAGS_16BIT 0x00004 //force 16-bit arguments
63
#define FLAGS_32BIT 0x00008 //force 32-bit arguments
64
#define FLAGS_REAL 0x00010 //real mode only
65
#define FLAGS_PMODE 0x00020 //protected mode only
66
#define FLAGS_PREFIX 0x00040 //for lock and rep prefix
67
#define FLAGS_MMX 0x00080 //mmx instruction/registers
68
#define FLAGS_FPU 0x00100 //fpu instruction/registers
69
#define FLAGS_CJMP 0x00200 //codeflow - conditional jump
70
#define FLAGS_JMP 0x00400 //codeflow - jump
71
#define FLAGS_IJMP 0x00800 //codeflow - indexed jump
72
#define FLAGS_CALL 0x01000 //codeflow - call
73
#define FLAGS_ICALL 0x02000 //codeflow - indexed call
74
#define FLAGS_RET 0x04000 //codeflow - return
75
#define FLAGS_SEGPREFIX 0x08000 //segment prefix
76
#define FLAGS_OPERPREFIX 0x10000 //operand prefix
77
#define FLAGS_ADDRPREFIX 0x20000 //address prefix
78
#define FLAGS_OMODE16 0x40000 //16-bit operand mode only
79
#define FLAGS_OMODE32 0x80000 //32-bit operand mode only
80
81
enum
argtype
{
82
ARG_REG
=1,
ARG_IMM
,
ARG_NONE
,
ARG_MODRM
,
ARG_REG_AX
,
83
ARG_REG_ES
,
ARG_REG_CS
,
ARG_REG_SS
,
ARG_REG_DS
,
ARG_REG_FS
,
ARG_REG_GS
,
ARG_REG_BX
,
84
ARG_REG_CX
,
ARG_REG_DX
,
85
ARG_REG_SP
,
ARG_REG_BP
,
ARG_REG_SI
,
ARG_REG_DI
,
ARG_IMM8
,
ARG_RELIMM8
,
ARG_FADDR
,
ARG_REG_AL
,
86
ARG_MEMLOC
,
ARG_SREG
,
ARG_RELIMM
,
ARG_16REG_DX
,
ARG_REG_CL
,
ARG_REG_DL
,
ARG_REG_BL
,
ARG_REG_AH
,
87
ARG_REG_CH
,
ARG_REG_DH
,
ARG_REG_BH
,
ARG_MODREG
,
ARG_CREG
,
ARG_DREG
,
ARG_TREG_67
,
ARG_TREG
,
88
ARG_MREG
,
ARG_MMXMODRM
,
ARG_MODRM8
,
ARG_IMM_1
,
ARG_MODRM_FPTR
,
ARG_MODRM_S
,
ARG_MODRMM512
,
89
ARG_MODRMQ
,
ARG_MODRM_SREAL
,
ARG_REG_ST0
,
ARG_FREG
,
ARG_MODRM_PTR
,
ARG_MODRM_WORD
,
ARG_MODRM_SINT
,
90
ARG_MODRM_EREAL
,
ARG_MODRM_DREAL
,
ARG_MODRM_WINT
,
ARG_MODRM_LINT
,
ARG_REG_BC
,
ARG_REG_DE
,
91
ARG_REG_HL
,
ARG_REG_DE_IND
,
ARG_REG_HL_IND
,
ARG_REG_BC_IND
,
ARG_REG_SP_IND
,
ARG_REG_A
,
92
ARG_REG_B
,
ARG_REG_C
,
ARG_REG_D
,
ARG_REG_E
,
ARG_REG_H
,
ARG_REG_L
,
ARG_IMM16
,
ARG_REG_AF
,
93
ARG_REG_AF2
,
ARG_MEMLOC16
,
ARG_IMM8_IND
,
ARG_BIT
,
ARG_REG_IX
,
ARG_REG_IX_IND
,
ARG_REG_IY
,
94
ARG_REG_IY_IND
,
ARG_REG_C_IND
,
ARG_REG_I
,
ARG_REG_R
,
ARG_IMM16_A
,
ARG_MODRM16
,
ARG_SIMM8
,
95
ARG_IMM32
,
ARG_STRING
,
ARG_MODRM_BCD
,
ARG_PSTRING
,
ARG_DOSSTRING
,
ARG_CUNICODESTRING
,
96
ARG_PUNICODESTRING
,
ARG_NONEBYTE
,
ARG_XREG
,
ARG_XMMMODRM
};
97
98
typedef
struct
x86_inst
{
99
int
flags
;
100
int
destType
,
srcType
,
auxType
;
101
int
cpu_type
;
102
int
inst_type
;
103
char
*
mnem
;
104
char
*
dest
, *
src
, *
aux
;
105
}
instr
;
106
107
108
#define GENREG_8 0x0001
109
#define GENREG_16 0x0002
110
#define GENREG_32 0x0004
111
#define SEGREG 0x0008
112
#define MMXREG 0x0010
113
#define SIMDREG 0x0020
114
#define DEBUGREG 0x0040
115
#define CONTROLREG 0x0080
116
#define TESTREG 0x0100
117
118
#define NO_REG 0x100
119
#define DIRECT_REG 0x200
120
#define NO_BASE 0x400
121
#define NO_INDEX 0x800
122
#define DISP8 0x1000
123
#define DISP32 0x2000
124
#define HAS_SIB 0x4000
125
#define HAS_MODRM 0x8000
126
127
struct
OPERAND
{
//arg1, arg2, arg3
128
char
*
str
;
//temporary buffer for building arg text
129
int
type
;
//argument type
130
int
*
flag
;
//pointer to CODE arg flags
131
char
*
text
;
//pointer to CODE arg text
132
};
133
134
struct
EA
{
//effective address [SIB/disp]
135
int
mode
,
flags
;
136
int
mod
,
rm
,
reg
;
137
long
disp
;
138
char
sib
[32];
139
};
140
141
struct
modRM_byte
{
142
unsigned
int
mod
: 2;
143
unsigned
int
reg
: 3;
144
unsigned
int
rm
: 3;
145
};
146
147
struct
SIB_byte
{
148
unsigned
int
scale
: 2;
149
unsigned
int
index
: 3;
150
unsigned
int
base
: 3;
151
};
152
153
typedef
struct
x86_table
{
//Assembly instruction tables
154
instr
*
table
;
//Pointer to table of instruction encodings
155
char
divisor
;
// number to divide by for look up
156
char
mask
;
// bit mask for look up
157
char
minlim
,
maxlim
;
// limits on min/max entries.
158
char
modrmpos
;
// modrm byte position plus
159
}
asmtable
;
ARG_DOSSTRING
Definition:
disassembler.h:95
code::mnemType
int mnemType
Definition:
disassembler.h:39
x86_table::divisor
char divisor
Definition:
disassembler.h:155
ARG_IMM32
Definition:
disassembler.h:95
x86_inst::aux
char * aux
Definition:
disassembler.h:104
ARG_RELIMM
Definition:
disassembler.h:86
ARG_TREG
Definition:
disassembler.h:87
code::srcType
int srcType
Definition:
disassembler.h:41
x86_inst::auxType
int auxType
Definition:
disassembler.h:100
ARG_REG_ES
Definition:
disassembler.h:83
EA::rm
int rm
Definition:
disassembler.h:136
modRM_byte
Definition:
disassembler.h:141
ARG_REG_FS
Definition:
disassembler.h:83
ARG_PUNICODESTRING
Definition:
disassembler.h:96
x86_inst::inst_type
int inst_type
Definition:
disassembler.h:102
instr
struct x86_inst instr
ARG_REG_SS
Definition:
disassembler.h:83
ARG_REG_C
Definition:
disassembler.h:92
ARG_REG_SI
Definition:
disassembler.h:85
ARG_REG_IY_IND
Definition:
disassembler.h:94
ARG_REG_R
Definition:
disassembler.h:94
ARG_REG_AH
Definition:
disassembler.h:86
ARG_REG_CL
Definition:
disassembler.h:86
ARG_SIMM8
Definition:
disassembler.h:94
x86_table::mask
char mask
Definition:
disassembler.h:156
ARG_REG_HL_IND
Definition:
disassembler.h:91
ARG_FADDR
Definition:
disassembler.h:85
ARG_MODRMQ
Definition:
disassembler.h:89
ARG_REG_IX
Definition:
disassembler.h:93
ARG_REG_E
Definition:
disassembler.h:92
ARG_MODRM_FPTR
Definition:
disassembler.h:88
modRM_byte::rm
unsigned int rm
Definition:
disassembler.h:144
ARG_16REG_DX
Definition:
disassembler.h:86
ARG_FREG
Definition:
disassembler.h:89
x86_inst::flags
int flags
Definition:
disassembler.h:99
ARG_REG_BP
Definition:
disassembler.h:85
ARG_REG_BH
Definition:
disassembler.h:87
ARG_REG_DX
Definition:
disassembler.h:84
OPERAND::flag
int * flag
Definition:
disassembler.h:130
ARG_MEMLOC16
Definition:
disassembler.h:93
modRM_byte::mod
unsigned int mod
Definition:
disassembler.h:142
x86_inst::cpu_type
int cpu_type
Definition:
disassembler.h:101
ARG_BIT
Definition:
disassembler.h:93
modRM_byte::reg
unsigned int reg
Definition:
disassembler.h:143
ARG_REG_DE_IND
Definition:
disassembler.h:91
SIB_byte::index
unsigned int index
Definition:
disassembler.h:149
argtype
argtype
Definition:
disassembler.h:81
EA::mode
int mode
Definition:
disassembler.h:135
ARG_REG_I
Definition:
disassembler.h:94
ARG_REG_DH
Definition:
disassembler.h:87
ARG_REG_CH
Definition:
disassembler.h:87
ARG_REG_DI
Definition:
disassembler.h:85
ARG_MREG
Definition:
disassembler.h:88
ARG_REG_CX
Definition:
disassembler.h:84
ARG_REG_AX
Definition:
disassembler.h:82
ARG_REG_CS
Definition:
disassembler.h:83
code::mnemonic
char mnemonic[16]
Definition:
disassembler.h:35
ARG_REG_L
Definition:
disassembler.h:92
ARG_CUNICODESTRING
Definition:
disassembler.h:95
x86_table::minlim
char minlim
Definition:
disassembler.h:157
ARG_REG_BX
Definition:
disassembler.h:83
ARG_REG_HL
Definition:
disassembler.h:91
ARG_REG_DS
Definition:
disassembler.h:83
ARG_REG_IX_IND
Definition:
disassembler.h:93
EA::disp
long disp
Definition:
disassembler.h:137
ARG_IMM_1
Definition:
disassembler.h:88
ARG_IMM
Definition:
disassembler.h:82
ARG_REG_SP_IND
Definition:
disassembler.h:91
ARG_REG_BL
Definition:
disassembler.h:86
ARG_MODRM_BCD
Definition:
disassembler.h:95
ARG_REG_D
Definition:
disassembler.h:92
ARG_REG_A
Definition:
disassembler.h:91
x86_table::table
instr * table
Definition:
disassembler.h:154
ARG_DREG
Definition:
disassembler.h:87
CPU_TYPE::model
char model[12]
Definition:
disassembler.h:48
OPERAND::text
char * text
Definition:
disassembler.h:131
EA::mod
int mod
Definition:
disassembler.h:136
EA::flags
int flags
Definition:
disassembler.h:135
x86_inst::srcType
int srcType
Definition:
disassembler.h:100
SIB_byte::base
unsigned int base
Definition:
disassembler.h:150
ARG_MODREG
Definition:
disassembler.h:87
SIB_byte::scale
unsigned int scale
Definition:
disassembler.h:148
ARG_REG_BC
Definition:
disassembler.h:90
ARG_REG_GS
Definition:
disassembler.h:83
ARG_IMM16
Definition:
disassembler.h:92
CPU_TYPE
Definition:
disassembler.h:46
ARG_REG_ST0
Definition:
disassembler.h:89
ARG_REG_AF2
Definition:
disassembler.h:93
ARG_IMM8
Definition:
disassembler.h:85
ARG_XMMMODRM
Definition:
disassembler.h:96
code::rva
unsigned long rva
Definition:
disassembler.h:33
SIB_byte
Definition:
disassembler.h:147
code::aux
char aux[32]
Definition:
disassembler.h:38
ARG_REG_AF
Definition:
disassembler.h:92
x86_inst
Definition:
disassembler.h:98
ARG_REG_IY
Definition:
disassembler.h:93
asmtable
struct x86_table asmtable
code::destType
int destType
Definition:
disassembler.h:40
ARG_STRING
Definition:
disassembler.h:95
ARG_MODRM8
Definition:
disassembler.h:88
ARG_CREG
Definition:
disassembler.h:87
ARG_REG_AL
Definition:
disassembler.h:85
ARG_MODRM_PTR
Definition:
disassembler.h:89
ARG_MODRM_EREAL
Definition:
disassembler.h:90
ARG_MODRM
Definition:
disassembler.h:82
ARG_REG_C_IND
Definition:
disassembler.h:94
src
GLenum src
Definition:
glext.h:6340
code
Definition:
inflate.c:139
ARG_REG
Definition:
disassembler.h:82
ARG_SREG
Definition:
disassembler.h:86
code::dest
char dest[32]
Definition:
disassembler.h:36
code::auxType
int auxType
Definition:
disassembler.h:42
ARG_MODRM_WINT
Definition:
disassembler.h:90
ARG_MMXMODRM
Definition:
disassembler.h:88
ARG_MODRM_LINT
Definition:
disassembler.h:90
ARG_XREG
Definition:
disassembler.h:96
x86_inst::destType
int destType
Definition:
disassembler.h:100
ARG_RELIMM8
Definition:
disassembler.h:85
x86_table::maxlim
char maxlim
Definition:
disassembler.h:157
ARG_REG_B
Definition:
disassembler.h:92
ARG_MODRM_S
Definition:
disassembler.h:88
ARG_PSTRING
Definition:
disassembler.h:95
x86_table::modrmpos
char modrmpos
Definition:
disassembler.h:158
ARG_REG_SP
Definition:
disassembler.h:85
ARG_IMM16_A
Definition:
disassembler.h:94
x86_inst::dest
char * dest
Definition:
disassembler.h:104
OPERAND::type
int type
Definition:
disassembler.h:129
ARG_REG_DL
Definition:
disassembler.h:86
CPU_TYPE::vendor
char vendor
Definition:
disassembler.h:47
ARG_REG_H
Definition:
disassembler.h:92
x86_inst::mnem
char * mnem
Definition:
disassembler.h:103
ARG_TREG_67
Definition:
disassembler.h:87
EA::reg
int reg
Definition:
disassembler.h:136
ARG_MEMLOC
Definition:
disassembler.h:86
ARG_REG_BC_IND
Definition:
disassembler.h:91
OPERAND::str
char * str
Definition:
disassembler.h:128
ARG_MODRMM512
Definition:
disassembler.h:88
ARG_MODRM_SREAL
Definition:
disassembler.h:89
x86_table
Definition:
disassembler.h:153
EA
Definition:
disassembler.h:134
ARG_MODRM_SINT
Definition:
disassembler.h:89
ARG_MODRM_WORD
Definition:
disassembler.h:89
ARG_REG_DE
Definition:
disassembler.h:90
ARG_NONE
Definition:
disassembler.h:82
code::flags
unsigned short flags
Definition:
disassembler.h:34
ARG_NONEBYTE
Definition:
disassembler.h:96
ARG_MODRM_DREAL
Definition:
disassembler.h:90
ARG_IMM8_IND
Definition:
disassembler.h:93
ARG_MODRM16
Definition:
disassembler.h:94
x86_inst::src
char * src
Definition:
disassembler.h:104
EA::sib
char sib[32]
Definition:
disassembler.h:138
OPERAND
Definition:
disassembler.h:127
modules
rosapps
applications
sysutils
utils
pice
module
disassembler.h
Generated on Thu Jan 26 2023 06:08:08 for ReactOS by
1.8.15