V3_OP_SETB, V3_OP_SETBE, V3_OP_SETL, V3_OP_SETLE, V3_OP_SETNB,
V3_OP_SETNBE, V3_OP_SETNL, V3_OP_SETNLE, V3_OP_SETNO, V3_OP_SETNP,
V3_OP_SETNS, V3_OP_SETNZ, V3_OP_SETO, V3_OP_SETP, V3_OP_SETS,
- V3_OP_SETZ, V3_OP_MOVS, V3_OP_STOS, V3_OP_MOVZX, V3_OP_MOVSX} v3_op_type_t;
+ V3_OP_SETZ, V3_OP_MOVS, V3_OP_STOS, V3_OP_MOVZX, V3_OP_MOVSX } v3_op_type_t;
typedef enum {INVALID_OPERAND, REG_OPERAND, MEM_OPERAND, IMM_OPERAND} v3_operand_type_t;
addr_t operand;
uint_t size;
v3_operand_type_t type;
+ uint8_t read : 1;
+ uint8_t write : 1;
};
struct x86_prefixes {
uint_t br_taken : 1; // 0x3E
uint_t op_size : 1; // 0x66
uint_t addr_size : 1; // 0x67
+
+ uint_t rex : 1;
+
+ uint_t rex_rm : 1; // REX.B
+ uint_t rex_sib_idx : 1; // REX.X
+ uint_t rex_reg : 1; // REX.R
+ uint_t rex_op_size : 1; // REX.W
+
} __attribute__((packed));
struct x86_operand third_operand;
addr_t str_op_length;
addr_t is_str_op;
- // void * decoder_data;
};
uint8_t v3_get_prefixes(uint8_t * instr, struct x86_prefixes * prefixes);
-
void v3_print_instr(struct x86_instr * instr);