GDB 等调试功能通过设置 eflags 寄存器的 TF 标志来工作,这会在处理器每次执行指令后导致异常。当我们运行虚拟机时,如果 kvm 做同样的事情,您需要设置一个名为 MONITOR TRAP FLAG 的标志(当前英特尔软件手册 3c 的第 15 页),这将导致虚拟机退出(VMEXIT)在每条指令向管理程序提供调试之后。
我面临一个问题,我需要设置 BTF(分支陷阱标志)(PG 689 vOLUME 3a INTEL 软件手册)。在正常情况下,这会在每个分支指令上导致 DEBUG EXCEPTION,但由于我想在 VM 上执行此操作,因此我无法确定要在 VMCS 中设置哪个位。在单步的情况下,似乎没有直接的方法可以做到这一点。谁能让我知道是否有某种方法可以使用其他方式做同样的事情?