summaryrefslogtreecommitdiff
path: root/src/arch/x86/instruction.h
diff options
context:
space:
mode:
authorCyrille Bagard <nocbos@gmail.com>2009-05-17 22:59:55 (GMT)
committerCyrille Bagard <nocbos@gmail.com>2009-05-17 22:59:55 (GMT)
commit4d0ff0c23862c242d533d9b2d34e8812ef99ad61 (patch)
tree3b8504b8d3946a8bc9a702b819138ab1e5501be6 /src/arch/x86/instruction.h
parent96cb6971ee3ca529958b8cb1e8e55a6eb4e60eae (diff)
Used only the new format of processor/instructions/operands for x86.
git-svn-id: svn://svn.gna.org/svn/chrysalide/trunk@64 abbe820e-26c8-41b2-8c08-b7b2b41f8b0a
Diffstat (limited to 'src/arch/x86/instruction.h')
-rw-r--r--src/arch/x86/instruction.h349
1 files changed, 188 insertions, 161 deletions
diff --git a/src/arch/x86/instruction.h b/src/arch/x86/instruction.h
index cbdbe2d..1a65066 100644
--- a/src/arch/x86/instruction.h
+++ b/src/arch/x86/instruction.h
@@ -26,223 +26,250 @@
#include "../instruction.h"
-#include "../instruction-int.h"
-
-
-
-/* Définition d'une instruction x86 */
-typedef struct _asm_x86_instr asm_x86_instr;
/* Enumération de tous les opcodes */
typedef enum _X86Opcodes
{
- X86_OP_ADD_RM8_R8, /* add (0x00) */
- X86_OP_ADD_RM1632_R1632, /* add ([0x66] 0x01) */
- X86_OP_ADD_R8_RM8, /* add (0x02) */
- X86_OP_ADD_R1632_RM1632, /* add ([0x66] 0x03) */
- X86_OP_ADD_AL_IMM8, /* add (0x04) */
- X86_OP_ADD_E_AX_IMM1632, /* sub ([0x66] 0x05) */
-
- X86_OP_ADC_RM8_R8, /* adc (0x10) */
-
- X86_OP_OR_R8_RM8, /* or (0x0a) */
-
- X86_OP_OR_AL_IMM8, /* or (0x0c) */
-
- X86_OP_AND_RM8_R8, /* and (0x00) */
-
- X86_OP_SUB_R1632_RM1632, /* sub ([0x66] 0x29) */
-
- X86_OP_SUB_R8_RM8, /* add (0x2a) */
- X86_OP_SUB_AL_IMM8, /* sub (0x2c) */
- X86_OP_SUB_E_AX_IMM1632, /* sub ([0x66] 0x2d) */
-
- X86_OP_XOR_RM8_R8, /* xor (0x30) */
- X86_OP_XOR_RM1632_R1632, /* xor ([0x66] 0x31) */
- X86_OP_XOR_R8_RM8, /* xor (0x32) */
- X86_OP_XOR_R1632_RM1632, /* xor ([0x66] 0x33) */
- X86_OP_XOR_AL_IMM8, /* xor (0x34) */
- X86_OP_XOR_E_AX_IMM1632, /* xor ([0x66] 0x35) */
-
- X86_OP_CMP_RM1632_R1632, /* cmp ([0x66] 0x39) */
-
- X86_OP_INC_E_AX, /* inc ([0x66] 0x40) */
- X86_OP_INC_E_CX, /* inc ([0x66] 0x41) */
- X86_OP_INC_E_DX, /* inc ([0x66] 0x42) */
- X86_OP_INC_E_BX, /* inc ([0x66] 0x43) */
- X86_OP_INC_E_SP, /* inc ([0x66] 0x44) */
- X86_OP_INC_E_BP, /* inc ([0x66] 0x45) */
- X86_OP_INC_E_SI, /* inc ([0x66] 0x46) */
- X86_OP_INC_E_DI, /* inc ([0x66] 0x47) */
-
- X86_OP_DEC_E_AX, /* dec ([0x66] 0x48) */
- X86_OP_DEC_E_CX, /* dec ([0x66] 0x49) */
- X86_OP_DEC_E_DX, /* dec ([0x66] 0x4a) */
- X86_OP_DEC_E_BX, /* dec ([0x66] 0x4b) */
- X86_OP_DEC_E_SP, /* dec ([0x66] 0x4c) */
- X86_OP_DEC_E_BP, /* dec ([0x66] 0x4d) */
- X86_OP_DEC_E_SI, /* dec ([0x66] 0x4e) */
- X86_OP_DEC_E_DI, /* dec ([0x66] 0x4f) */
-
- X86_OP_PUSH_E_AX, /* push ([0x66] 0x50) */
- X86_OP_PUSH_E_CX, /* push ([0x66] 0x51) */
- X86_OP_PUSH_E_DX, /* push ([0x66] 0x52) */
- X86_OP_PUSH_E_BX, /* push ([0x66] 0x53) */
- X86_OP_PUSH_E_SP, /* push ([0x66] 0x54) */
- X86_OP_PUSH_E_BP, /* push ([0x66] 0x55) */
- X86_OP_PUSH_E_SI, /* push ([0x66] 0x56) */
- X86_OP_PUSH_E_DI, /* push ([0x66] 0x57) */
-
- X86_OP_POP_E_AX, /* pop ([0x66] 0x58) */
- X86_OP_POP_E_CX, /* pop ([0x66] 0x59) */
- X86_OP_POP_E_DX, /* pop ([0x66] 0x5a) */
- X86_OP_POP_E_BX, /* pop ([0x66] 0x5b) */
- X86_OP_POP_E_SP, /* pop ([0x66] 0x5c) */
- X86_OP_POP_E_BP, /* pop ([0x66] 0x5d) */
- X86_OP_POP_E_SI, /* pop ([0x66] 0x5e) */
- X86_OP_POP_E_DI, /* pop ([0x66] 0x5f) */
+ XOP_ADD_RM8_R8, /* add (0x00) */
+ XOP_ADD_RM1632_R1632, /* add ([0x66] 0x01) */
+ XOP_ADD_R8_RM8, /* add (0x02) */
+ XOP_ADD_R1632_RM1632, /* add ([0x66] 0x03) */
+ XOP_ADD_AL_IMM8, /* add (0x04) */
+ XOP_ADD_E_AX_IMM1632, /* sub ([0x66] 0x05) */
+
+ XOP_OR_R8_RM8, /* or (0x0a) */
+ XOP_OR_AL_IMM8, /* or (0x0c) */
+
+ XOP_ADC_RM8_R8, /* adc (0x10) */
+
+ XOP_AND_RM8_R8, /* and (0x20) */
+
+ XOP_SUB_RM1632_R1632, /* sub ([0x66] 0x29) */
+
+ XOP_SUB_R8_RM8, /* sub (0x2a) */
+ XOP_SUB_AL_IMM8, /* sub (0x2c) */
+
+ XOP_SUB_E_AX_IMM1632, /* sub ([0x66] 0x2d) */
+
+
+ XOP_XOR_RM8_R8, /* xor (0x30) */
+ XOP_XOR_RM1632_R1632, /* xor ([0x66] 0x31) */
+ XOP_XOR_R8_RM8, /* xor (0x32) */
+ XOP_XOR_R1632_RM1632, /* xor ([0x66] 0x33) */
+ XOP_XOR_AL_IMM8, /* xor (0x34) */
+ XOP_XOR_E_AX_IMM1632, /* xor ([0x66] 0x35) */
+
+
+ XOP_CMP_RM1632_R1632, /* cmp ([0x66] 0x39) */
+ XOP_INC_E_AX, /* inc ([0x66] 0x40) */
+ XOP_INC_E_CX, /* inc ([0x66] 0x41) */
+ XOP_INC_E_DX, /* inc ([0x66] 0x42) */
+ XOP_INC_E_BX, /* inc ([0x66] 0x43) */
+ XOP_INC_E_SP, /* inc ([0x66] 0x44) */
+ XOP_INC_E_BP, /* inc ([0x66] 0x45) */
+ XOP_INC_E_SI, /* inc ([0x66] 0x46) */
+ XOP_INC_E_DI, /* inc ([0x66] 0x47) */
+ XOP_DEC_E_AX, /* dec ([0x66] 0x48) */
+ XOP_DEC_E_CX, /* dec ([0x66] 0x49) */
+ XOP_DEC_E_DX, /* dec ([0x66] 0x4a) */
+ XOP_DEC_E_BX, /* dec ([0x66] 0x4b) */
+ XOP_DEC_E_SP, /* dec ([0x66] 0x4c) */
+ XOP_DEC_E_BP, /* dec ([0x66] 0x4d) */
+ XOP_DEC_E_SI, /* dec ([0x66] 0x4e) */
+ XOP_DEC_E_DI, /* dec ([0x66] 0x4f) */
+ XOP_PUSH_E_AX, /* push ([0x66] 0x50) */
+ XOP_PUSH_E_CX, /* push ([0x66] 0x51) */
+ XOP_PUSH_E_DX, /* push ([0x66] 0x52) */
+ XOP_PUSH_E_BX, /* push ([0x66] 0x53) */
+ XOP_PUSH_E_SP, /* push ([0x66] 0x54) */
+ XOP_PUSH_E_BP, /* push ([0x66] 0x55) */
+ XOP_PUSH_E_SI, /* push ([0x66] 0x56) */
+ XOP_PUSH_E_DI, /* push ([0x66] 0x57) */
+ XOP_POP_E_AX, /* pop ([0x66] 0x58) */
+ XOP_POP_E_CX, /* pop ([0x66] 0x59) */
+ XOP_POP_E_DX, /* pop ([0x66] 0x5a) */
+ XOP_POP_E_BX, /* pop ([0x66] 0x5b) */
+ XOP_POP_E_SP, /* pop ([0x66] 0x5c) */
+ XOP_POP_E_BP, /* pop ([0x66] 0x5d) */
+ XOP_POP_E_SI, /* pop ([0x66] 0x5e) */
+ XOP_POP_E_DI, /* pop ([0x66] 0x5f) */
+
+
+ XOP_PUSH_IMM1632, /* push ([0x66] 0x68) */
+
+
+ XOP_JO_REL8, /* jo (0x70) */
+ XOP_JNO_REL8, /* jno (0x71) */
+ XOP_JB_REL8, /* jb (0x72) */
+ XOP_JNB_REL8, /* jnb (0x73) */
+ XOP_JE_REL8, /* je (0x74) */
+ XOP_JNE_REL8, /* jne (0x75) */
+ XOP_JNA_REL8, /* jna (0x76) */
+ XOP_JA_REL8, /* ja (0x77) */
+ XOP_JS_REL8, /* js (0x78) */
+ XOP_JNS_REL8, /* jns (0x79) */
+ XOP_JP_REL8, /* jp (0x7a) */
+ XOP_JNP_REL8, /* jnp (0x7b) */
+ XOP_JL_REL8, /* jl (0x7c) */
+ XOP_JNL_REL8, /* jnl (0x7d) */
+ XOP_JNG_REL8, /* jng (0x7e) */
+ XOP_JG_REL8, /* jg (0x7f) */
+ XOP_ADD_RM8_IMM8, /* add (0x80 0) */
+ XOP_OR_RM8_IMM8, /* or (0x80 1) */
+ XOP_ADC_RM8_IMM8, /* adc (0x80 2) */
+ XOP_SBB_RM8_IMM8, /* sbb (0x80 3) */
+ XOP_AND_RM8_IMM8, /* and (0x80 4) */
+ XOP_SUB_RM8_IMM8, /* sub (0x80 5) */
+ XOP_XOR_RM8_IMM8, /* xor (0x80 6) */
+ XOP_CMP_RM8_IMM8, /* cmp (0x80 7) */
+ XOP_ADD_RM1632_IMM1632, /* add ([0x66] 0x81 0) */
+ XOP_OR_RM1632_IMM1632, /* or ([0x66] 0x81 1) */
+ XOP_ADC_RM1632_IMM1632, /* adc ([0x66] 0x81 2) */
+ XOP_SBB_RM1632_IMM1632, /* sbb ([0x66] 0x81 3) */
+ XOP_AND_RM1632_IMM1632, /* and ([0x66] 0x81 4) */
+ XOP_SUB_RM1632_IMM1632, /* sub ([0x66] 0x81 5) */
+ XOP_XOR_RM1632_IMM1632, /* xor ([0x66] 0x81 6) */
+ XOP_CMP_RM1632_IMM1632, /* xor ([0x66] 0x81 7) */
- X86_OP_PUSH_IMM1632, /* push ([0x66] 0x68) */
- X86_OP_JB_REL8, /* jb (0x72) */
- X86_OP_JNB_REL8, /* jnb (0x73) */
+ XOP_ADD_RM1632_IMM8, /* add ([0x66] 0x83 0) */
+ XOP_OR_RM1632_IMM8, /* or ([0x66] 0x83 1) */
+ XOP_ADC_RM1632_IMM8, /* adc ([0x66] 0x83 2) */
+ XOP_SBB_RM1632_IMM8, /* sbb ([0x66] 0x83 3) */
+ XOP_AND_RM1632_IMM8, /* and ([0x66] 0x83 4) */
+ XOP_SUB_RM1632_IMM8, /* sub ([0x66] 0x83 5) */
+ XOP_XOR_RM1632_IMM8, /* xor ([0x66] 0x83 6) */
+ XOP_CMP_RM1632_IMM8, /* cmp ([0x66] 0x83 7) */
- X86_OP_JE_8, /* je (0x74) */
- X86_OP_JNE_8, /* jne (0x75) */
- X86_OP_JG_REL8, /* jg (0x7f) */
- X86_OP_XOR_RM8_IMM8, /* xor (0x80 6) */
- X86_OP_CMP_RM8_IMM8, /* cmp (0x80 7) */
+ XOP_TEST_RM8_R8, /* test (0x84) */
+ XOP_TEST_RM1632_R1632, /* test ([0x66] 0x85) */
- X86_OP_ADD_RM1632_IMM1632, /* add ([0x66] 0x81 0) */
- X86_OP_OR_RM1632_IMM1632, /* or ([0x66] 0x81 1) */
- X86_OP_ADC_RM1632_IMM1632, /* adc ([0x66] 0x81 2) */
- X86_OP_SBB_RM1632_IMM1632, /* sbb ([0x66] 0x81 3) */
- X86_OP_AND_RM1632_IMM1632, /* and ([0x66] 0x81 4) */
- X86_OP_SUB_RM1632_IMM1632, /* sub ([0x66] 0x81 5) */
- X86_OP_XOR_RM1632_IMM1632, /* xor ([0x66] 0x81 6) */
- X86_OP_CMP_RM1632_IMM1632, /* xor ([0x66] 0x81 7) */
- X86_OP_ADD_RM1632_IMM8, /* add ([0x66] 0x83 0) */
- X86_OP_OR_RM1632_IMM8, /* or ([0x66] 0x83 1) */
- X86_OP_ADC_RM1632_IMM8, /* adc ([0x66] 0x83 2) */
- X86_OP_SBB_RM1632_IMM8, /* sbb ([0x66] 0x83 3) */
- X86_OP_AND_RM1632_IMM8, /* and ([0x66] 0x83 4) */
- X86_OP_SUB_RM1632_IMM8, /* sub ([0x66] 0x83 5) */
- X86_OP_XOR_RM1632_IMM8, /* xor ([0x66] 0x83 6) */
- X86_OP_CMP_RM1632_IMM8, /* cmp ([0x66] 0x08 7) */
- X86_OP_TEST_RM8_R8, /* test ([0x66] 0x84) */
- X86_OP_TEST_RM1632_R1632, /* test ([0x66] 0x85) */
+ XOP_MOV_RM8_R8, /* mov (0x88) */
+ XOP_MOV_RM1632_R1632, /* mov ([0x66] 0x89) */
- X86_OP_MOV_RM8_R8, /* mov (0x88) */
- X86_OP_MOV_RM1632_R1632, /* mov ([0x66] 0x89) */
+ XOP_MOV_R1632_RM1632, /* mov ([0x66] 0x8b) */
- X86_OP_MOV_R1632_RM1632, /* mov ([0x66] 0x8b) */
- X86_OP_LEA, /* lea ([0x66] 0x8d) */ /* 66 ? */
- X86_OP_NOP, /* nop (0x90) */
+ XOP_LEA_R1632_M, /* lea ([0x66] 0x8d) */
+
+
+ XOP_NOP, /* nop (0x90) */
- X86_OP_MOV_MOFFS_TO_AL, /* mov (0xa0) */
- X86_OP_MOV_MOFFS_TO_E_AX, /* mov ([0x66] 0xa1) */
- X86_OP_MOV_AL_TO_MOFFS, /* mov (0xa2) */
- X86_OP_MOV_E_AX_TO_MOFFS, /* mov ([0x66] 0xa3) */
- X86_OP_TEST_AL, /* test (0xa8) */
- X86_OP_TEST_E_AX, /* test ([0x66] 0xa9) */
-
- X86_OP_MOV_E_AX, /* mov ([0x66] 0xb8) */
- X86_OP_MOV_E_CX, /* mov ([0x66] 0xb9) */
- X86_OP_MOV_E_DX, /* mov ([0x66] 0xba) */
- X86_OP_MOV_E_BX, /* mov ([0x66] 0xbb) */
- X86_OP_MOV_E_SP, /* mov ([0x66] 0xbc) */
- X86_OP_MOV_E_BP, /* mov ([0x66] 0xbd) */
- X86_OP_MOV_E_SI, /* mov ([0x66] 0xbe) */
- X86_OP_MOV_E_DI, /* mov ([0x66] 0xbf) */
+ XOP_XCHG_R1632_E_AX, /* xchg ([0x66] 0x90) */
+ XOP_XCHG_R1632_E_CX, /* xchg ([0x66] 0x91) */
+ XOP_XCHG_R1632_E_DX, /* xchg ([0x66] 0x92) */
+ XOP_XCHG_R1632_E_BX, /* xchg ([0x66] 0x93) */
+ XOP_XCHG_R1632_E_SP, /* xchg ([0x66] 0x94) */
+ XOP_XCHG_R1632_E_BP, /* xchg ([0x66] 0x95) */
+ XOP_XCHG_R1632_E_SI, /* xchg ([0x66] 0x96) */
+ XOP_XCHG_R1632_E_DI, /* xchg ([0x66] 0x97) */
- X86_OP_ROL_RM1632_IMM8, /* rol ([0x66] 0xc1 0) */
- X86_OP_ROR_RM1632_IMM8, /* ror ([0x66] 0xc1 1) */
- X86_OP_RCL_RM1632_IMM8, /* rcl ([0x66] 0xc1 2) */
- X86_OP_RCR_RM1632_IMM8, /* rcr ([0x66] 0xc1 3) */
- X86_OP_SHL_RM1632_IMM8, /* shl ([0x66] 0xc1 4) */
- X86_OP_SHR_RM1632_IMM8, /* shr ([0x66] 0xc1 5) */
- X86_OP_SAL_RM1632_IMM8, /* sal ([0x66] 0xc1 6) */
- X86_OP_SAR_RM1632_IMM8, /* sar ([0x66] 0xc1 7) */
- X86_OP_RET, /* ret (0xc3) */
+ XOP_MOV_AL_MOFFS8, /* mov (0xa0) */
+ XOP_MOV_E_AX_MOFFS1632, /* mov ([0x66] 0xa1) */
+ XOP_MOV_MOFFS8_AL, /* mov (0xa2) */
+ XOP_MOV_MOFFS1632_E_AX, /* mov ([0x66] 0xa3) */
- X86_OP_MOV_IMM8_TO_RM8, /* mov (0xc6) */
- X86_OP_MOV_IMM1632_TO_RM1632, /* mov ([0x66] 0xc7) */
- X86_OP_LEAVE, /* leave (0xc9) */
+ XOP_TEST_AL_IMM8, /* test (0xa8) */
+ XOP_TEST_E_AX_IMM1632, /* test ([0x66] 0xa9) */
- X86_OP_INT_3, /* int 3 (0xcc) */
- X86_OP_INT, /* int (0xcd) */
- X86_OP_SHL_RM1632_CL, /* shl ([0x66] 0xd3 4) */
+ XOP_MOV_E_AX_IMM1632, /* mov ([0x66] 0xb8) */
+ XOP_MOV_E_CX_IMM1632, /* mov ([0x66] 0xb9) */
+ XOP_MOV_E_DX_IMM1632, /* mov ([0x66] 0xba) */
+ XOP_MOV_E_BX_IMM1632, /* mov ([0x66] 0xbb) */
+ XOP_MOV_E_SP_IMM1632, /* mov ([0x66] 0xbc) */
+ XOP_MOV_E_BP_IMM1632, /* mov ([0x66] 0xbd) */
+ XOP_MOV_E_SI_IMM1632, /* mov ([0x66] 0xbe) */
+ XOP_MOV_E_DI_IMM1632, /* mov ([0x66] 0xbf) */
- X86_OP_CALL_REL1632, /* call ([0x66] 0xe8) */
- X86_OP_JMP_REL1632, /* jmp ([0x66] 0xe9) */
- X86_OP_JMP_8, /* jmp (0xeb) */
+ XOP_ROL_RM1632_IMM8, /* rol ([0x66] 0xc1 0) */
+ XOP_ROR_RM1632_IMM8, /* ror ([0x66] 0xc1 1) */
+ XOP_RCL_RM1632_IMM8, /* rcl ([0x66] 0xc1 2) */
+ XOP_RCR_RM1632_IMM8, /* rcr ([0x66] 0xc1 3) */
+ XOP_SHL_RM1632_IMM8, /* shl ([0x66] 0xc1 4) */
+ XOP_SHR_RM1632_IMM8, /* shr ([0x66] 0xc1 5) */
+ XOP_SAL_RM1632_IMM8, /* sal ([0x66] 0xc1 6) */
+ XOP_SAR_RM1632_IMM8, /* sar ([0x66] 0xc1 7) */
- X86_OP_HLT, /* hlt (0xf4) */
- X86_OP_NOT_RM1632, /* not ([0x66] 0xf7 2) */
+ XOP_RET, /* ret (0xc3) */
- X86_OP_CLD, /* cld (0xfc) */
+ XOP_MOV_RM8_IMM8, /* mov (0xc6 0) */
+ XOP_MOV_RM1632_IMM1632, /* mov ([0x66] 0xc7 0) */
- X86_OP_CALL_RM1632, /* call ([0x66] 0xff 2) */
- X86_OP_JMP_RM1632, /* jmp ([0x66] 0xff 4) */
- X86_OP_PUSH_RM1632, /* push ([0x66] 0xff 6) */
+ XOP_LEAVE, /* leave (0xc9) */
- X86_OP_MOVZX_R1632_RM8, /* movzx ([0x66] 0x0f 0xb6) */
+ XOP_INT_3, /* int 3 (0xcc) */
+ XOP_INT, /* int (0xcd) */
- X86_OP_MOVSX_R1632_RM8, /* movsx ([0x66] 0x0f 0xbe) */
+ XOP_SHL_RM1632_CL, /* shl ([0x66] 0xd3 4) */
- X86_OP_COUNT
+ XOP_CALL_REL1632, /* call ([0x66] 0xe8) */
+ XOP_JMP_REL1632, /* jmp ([0x66] 0xe9) */
-} X86Opcodes;
+ XOP_JMP_REL8, /* jmp (0xeb) */
+ XOP_HLT, /* hlt (0xf4) */
+ XOP_NOT_RM1632, /* not ([0x66] 0xf7 2) */
+ XOP_CLD, /* cld (0xfc) */
-/* Eventuel préfixe rencontré */
-typedef enum _X86Prefix
-{
- X86_PRE_NONE = (0 << 0), /* Aucun préfixe */
+ XOP_CALL_RM1632, /* call ([0x66] 0xff 2) */
+ XOP_JMP_RM1632, /* jmp ([0x66] 0xff 4) */
+ XOP_PUSH_RM1632, /* push ([0x66] 0xff 6) */
+
+ XOP_COUNT
+} X86Opcodes;
- /* Groupe 3 */
- X86_PRE_OPSIZE = (1 << 1), /* Basculement des opérandes */
+#define G_TYPE_X86_INSTRUCTION g_x86_instruction_get_type()
+#define G_X86_INSTRUCTION(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), g_x86_instruction_get_type(), GX86Instruction))
+#define G_IS_X86_INSTRUCTION(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), g_x86_instruction_get_type()))
+#define G_X86_INSTRUCTION_GET_IFACE(inst) (G_TYPE_INSTANCE_GET_INTERFACE((inst), g_x86_instruction_get_type(), GX86InstructionIface))
- /* Autres */
- X86_PRE_ESCAPE = (1 << 3) /* Opcode sur deux octets */
+/* Définition générique d'une instruction d'architecture x86 (instance) */
+typedef struct _GX86Instruction GX86Instruction;
-} X86Prefix;
+/* Définition générique d'une instruction d'architecture x86 (classe) */
+typedef struct _GX86InstructionClass GX86InstructionClass;
+/* Indique le type défini pour une instruction d'architecture x86. */
+GType g_x86_instruction_get_type(void);
-/* Définition d'une instruction x86 */
-struct _asm_x86_instr
-{
- asm_instr base; /* A laisser en premier... */
+/* Crée une instruction pour l'architecture x86. */
+GArchInstruction *g_x86_instruction_new(X86Opcodes);
- X86Opcodes type;
- X86Prefix prefix; /* Eventuel préfixe trouvé */
+/* --------------------- AIDE A LA MISE EN PLACE D'INSTRUCTIONS --------------------- */
-};
+/* Types de préfixes pour x86 */
+typedef enum _X86Prefix
+{
+ XPX_NONE = (0 << 0), /* Code d'instruction pur */
+
+ XPX_OPERAND_SIZE_OVERRIDE = (1 << 0), /* Taille des opérandes */
+} X86Prefix;
+/* Recherche l'identifiant de la prochaine instruction. */
+X86Opcodes x86_guess_next_instruction(const bin_t *, off_t, off_t, X86Prefix *, bool *);