summaryrefslogtreecommitdiff
path: root/src/arch/x86/op_int.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/arch/x86/op_int.c')
-rw-r--r--src/arch/x86/op_int.c22
1 files changed, 15 insertions, 7 deletions
diff --git a/src/arch/x86/op_int.c b/src/arch/x86/op_int.c
index e7805e1..3c621d6 100644
--- a/src/arch/x86/op_int.c
+++ b/src/arch/x86/op_int.c
@@ -24,9 +24,9 @@
#include <malloc.h>
-#include "instruction.h"
#include "../instruction-int.h"
-
+#include "opcodes.h"
+#include "operand.h"
@@ -44,20 +44,28 @@
* *
******************************************************************************/
-asm_x86_instr *read_instr_int(const char *data, off_t *pos, off_t len)
+asm_x86_instr *read_instr_int(const uint8_t *data, off_t *pos, off_t len)
{
- asm_x86_instr *result;
+ asm_x86_instr *result; /* Instruction à retourner */
+ asm_x86_operand *syscall; /* Indice de l'appel système */
result = (asm_x86_instr *)calloc(1, sizeof(asm_x86_instr));
ASM_INSTRUCTION(result)->opcode = data[(*pos)++];
- /* TODO: check result */
- fill_db_operand(&ASM_INSTRUCTION(result)->operands[0], data[(*pos)++]);
+ syscall = create_new_x86_operand();
+ if (!fill_imm_operand(ASM_OPERAND(syscall), AOS_8_BITS, data, pos, len))
+ {
+ free(syscall);
+ free(result);
+ return NULL;
+ }
+ ASM_INSTRUCTION(result)->operands = (asm_operand **)calloc(1, sizeof(asm_operand *));
ASM_INSTRUCTION(result)->operands_count = 1;
+ ASM_INSTRUCTION(result)->operands[0] = ASM_OPERAND(syscall);
+
return result;
}
-