int emulate_done(int rc, size_t sz) { switch(rc) { case VM_DONE: vm_update_rip(sz); case VM_DONE_LET_RIP: info->vm.cpu.emu_sts = EMU_STS_DONE; break; } return rc; }
int vmx_vmexit_resolve_dr_access() { vmcs_exit_info_dr_t *access; uint8_t gpr; vmcs_read(vm_exit_info.qualification); access = &vm_exit_info.qualification.dr; gpr = GPR64_RAX - (access->gpr & GPR64_RAX); if(__resolve_dr(!access->dir, access->nr, gpr) == DR_SUCCESS) { info->vm.cpu.emu_done = 1; vmcs_read(vm_exit_info.insn_len); vm_update_rip(vm_exit_info.insn_len.raw); return 1; } return 0; }