【发布时间】:2013-01-21 10:25:53
【问题描述】:
GDB 等调试功能通过设置 eflags 寄存器的 TF 标志来工作,这会在处理器每次执行指令后导致异常,让 gdb 等工具控制调试。当我们运行虚拟机时,例如 kvm为了做同样的事情,你需要设置一个名为 MONITOR TRAP FLAG 的标志(当前英特尔软件手册 3c 的第 15 页),这将导致虚拟机在每条指令向管理程序提供调试后退出(VMEXIT)。
管理程序几乎可以设置 VM(来宾)的任何位/寄存器。当架构中已经存在这样的标志(EFLAG)时,为什么我们需要在 VMCS(虚拟 Macine 控制结构)中使用单独的标志??
我在某处读到,这样做的原因是,如果使用 EFLAGS,来宾可以覆盖 VMM(管理程序)的单步意图。
A:如果您没有控制权,那么模拟硬件有什么意义?
B:我遇到了需要设置 BTF(分支陷阱标志)的问题(PG 689 vOLUME 3a INTEL 软件手册)。在正常情况下,这会在每个分支指令上导致 DEBUG EXCEPTION,但由于我想在 VM 上执行此操作,因此我无法确定要在 VMCS 中设置哪个位。在单步的情况下,似乎没有直接的方法可以做到这一点。谁能告诉我是否有某种方法可以使用其他方式做同样的事情?
谢谢
【问题讨论】:
-
这接近“过于本地化”的领域。您或许应该尝试英特尔的处理器支持论坛。
-
@Jim Garrison 请告诉我可以在哪里发帖...我应该尝试 KVM 邮件列表...谢谢
-
我认为在极少数情况下 TF 不会立即陷入困境。不知道这是否是原因。
-
@Deepthought 知道 AMD SVM 的监视器陷阱标志的对应部分是什么?
标签: linux gdb virtual-machine intel kvm