typedef enum {INVALID_OPERAND, REG_OPERAND, MEM_OPERAND} operand_type_t;
-
+int parse();
struct x86_operand {
static inline addr_t get_addr_linear(struct guest_info * info, addr_t addr, struct v3_segment * seg) {
switch (info->cpu_mode) {
case REAL:
- return addr + (seg->selector << 4);
- break;
+ // It appears that the segment values are computed and cached in the vmcb structure
+ // We Need to check this for Intel
+ /* return addr + (seg->selector << 4);
+ break;*/
+
case PROTECTED:
return addr + seg->base;
break;
operand_type_t addr_type = INVALID_OPERAND;
char * instr_cursor = modrm_instr;
- PrintDebug("ModRM mod=%d\n", modrm->mod);
+ // PrintDebug("ModRM mod=%d\n", modrm->mod);
instr_cursor += 1;
if (modrm->mod == 3) {
mod_mode = REG;
addr_type = REG_OPERAND;
- PrintDebug("first operand = Register (RM=%d)\n",modrm->rm);
+ //PrintDebug("first operand = Register (RM=%d)\n",modrm->rm);
*first_operand = decode_register(gprs, modrm->rm, reg_size);
mod_mode = REG;
addr_type = REG_OPERAND;
- PrintDebug("first operand = Register (RM=%d)\n",modrm->rm);
+ // PrintDebug("first operand = Register (RM=%d)\n",modrm->rm);
*first_operand = decode_register(gprs, modrm->rm, reg_size);