如何实现/设置数据断点?

kiw*_*kiw 2 memory x86 operating-system kernel interrupt

要求:

当内存位置发生变化或被写入时,我需要生成一个中断.从ISR,我可以触发一个蓝屏,它给我一个很好的堆栈跟踪方法名称.

处理办法:

  • 测试计时器ISR中的值.显然,这并没有给人满意的结果.
  • 我发现了bochs虚拟机.它有一个基本的内置调试器,可以设置数据断点并停止程序.但我似乎无法在那时产生中断.
  • bochs允许一个人连接gdb.我无法使用gdb支持构建它.

其他想法:

  • 一种"预览指令"中断,在执行前触发每条指令.一组使用过的内存写入指令应该是非常容易管理的,但是我认为它仍然是一个提取地址的PITA.而且我认为没有这样的中断.
  • 一种"预览内存访问"中断.再说一遍,我不认为它在那里.
  • 滥用分页.将感兴趣的页面标记为不存在,并在页面错误处理程序中测试该地址.我们仍然需要区分读写操作,我认为,页面错误处理程序无法知道确切的地址,只知道页码.

ugh*_*fhw 6

请参阅英特尔软件开发人员手册第3A卷中的第16章.它提供了有关使用调试寄存器的信息,这些寄存器支持在访问某个地址时导致调试器异常等.在导致它的指令之后将触发中断.具体来说,您必须将dr0-dr3中的一个设置为要监视的地址,并将dr7设置为具有适当值以告诉处理器哪些类型的访问应该导致中断.