instr->instr_length += length;
#ifdef V3_CONFIG_DEBUG_DECODER
+ V3_Print("Decoding Instr at %p\n", (void *)core->rip);
v3_print_instr(instr);
V3_Print("CS DB FLag=%x\n", core->segments.cs.db);
#endif
instr->is_str_op = 1;
if (instr->prefixes.rep == 1) {
- instr->str_op_length = MASK(core->vm_regs.rcx, operand_width);
+ instr->str_op_length = MASK(core->vm_regs.rcx, addr_width);
} else {
instr->str_op_length = 1;
}
instr->is_str_op = 1;
if (instr->prefixes.rep == 1) {
- instr->str_op_length = MASK(core->vm_regs.rcx, operand_width);
+ instr->str_op_length = MASK(core->vm_regs.rcx, addr_width);
} else {
instr->str_op_length = 1;
}
break;
}
+ case INT: {
+ instr->dst_operand.type = IMM_OPERAND;
+ instr->dst_operand.size = operand_width;
+ instr->dst_operand.operand = *(uint8_t *)instr_ptr;
+ instr_ptr += operand_width;
+ instr->num_operands = 1;
+
+ break;
+ }
case INVLPG: {
uint8_t reg_code = 0;
case INVLPG:
return V3_OP_INVLPG;
- case INT:
+ case INT:
return V3_OP_INT;
case MOV_CR2: