我正在尝试在主机中配置调试寄存器,以便可以监视在Intel VT-x上运行的来宾的地址。为此,我将其称为KVM_SET_GUEST_DEBUG IOCTL。
struct kvm_guest_debug guest_debug;
guest_debug.control = KVM_GUESTDBG_ENABLE | KVM_GUESTDBG_USE_HW_BP;
guest_debug.arch.debugreg[0] = addr; // DR0
guest_debug.arch.debugreg[7] = encode_dr7(0, len, bpType);
if (ioctl(vcpu_fd, KVM_SET_GUEST_DEBUG, &guest_debug) < 0)
return false;
它成功设置了调试寄存器。但是,一旦调试寄存器读/写,它将导致VM_EXIT与EXIT_REASON_EXCEPTION_NMI。虽然我期望有EXIT_REASON_DR_ACCESS。导致nmi出口而不是DR_ACCESS出口的原因是什么?我将寄存器设置正确了吗?