x86调试寄存器:如何在特定物理地址上中断

时间:2017-08-30 18:52:50

标签: debugging x86 breakpoints paging systems-programming

x86调试寄存器(dr0到dr3)允许在软件尝试读/写(intel doc)时中断特定地址。此配置的地址必须是线性地址。

问题是,当启用分页时,相同的物理地址可能会被来自不同任务的几个不同的线性地址映射。

那么,当我们不知道所有可能的线性别名地址时,如何打破对特定物理地址的访问?

1 个答案:

答案 0 :(得分:1)

如果不修改底层内核,您只能通过虚拟化扩展来实现。当您是一个客户操作系统时,您认为的物理地址对于下一层是虚拟的;所以它可以使用调试寄存器来达到预期的效果。

如果您愿意修改内核,一种方法是拒绝映射“感兴趣的页面”,然后将此页面上的所有错误重定向到相应的调试器。它比我说的要复杂,你可能必须模仿/单步执行一些代码并保持一些错综复杂的状态。