如何在每个分支指令上以kvm执行VMEXIT?

时间:2013-02-06 18:21:23

标签: linux virtualization

GDB等调试功能通过设置eflags寄存器的TF标志来工作,该标志在处理器每次执行指令后都会导致异常。当我们运行虚拟机Ex时,如果kvm执行相同的操作,则需要设置一个名为MONITOR TRAP FLAG的标志(当前英特尔软件手册3c第15页),这将导致虚拟宏退出(VMEXIT)在每条指令都向管理程序提供调试之后。

我正面临一个问题,我需要设置BTF(分支陷阱标志)(PG 689 vOLUME 3a INTEL sotfware手册)。在正常情况下,这会导致每个分支指令出现DEBUG EXCEPTION,但由于我想在VM上执行此操作,因此我无法确定要在VMCS中设置哪个位。在单步执行的情况下似乎没有直接的方法。任何人都可以让我知道如果有某种方法可以使用其他方法做同样的事情吗?

1 个答案:

答案 0 :(得分:0)

BTF标志不在VMCS中;它在IA32_DEBUGCTL MSR中。 您需要通过在VM条目之前执行wrmsr来明确设置它。 对于KVM,您可以在vmx_vcpu_run中添加它。

为了使VM退出所有调试异常,请在VMCS中设置异常位图的第1位。有关导致VM退出的调试异常的信息保存在VMCS的退出限定字段中。然后,管理程序可以自己处理调试异常或将其注入到guest虚拟机中。