Memory 如何实现/设置数据断点? 要求:
当内存位置改变或写入时,我需要生成一个中断。从ISR中,我可以触发一个蓝屏,该蓝屏为我提供了一个很好的带有方法名的堆栈跟踪 方法:Memory 如何实现/设置数据断点? 要求:,memory,x86,operating-system,interrupt,watchpoint,Memory,X86,Operating System,Interrupt,Watchpoint,当内存位置改变或写入时,我需要生成一个中断。从ISR中,我可以触发一个蓝屏,该蓝屏为我提供了一个很好的带有方法名的堆栈跟踪 方法: 测试计时器ISR中的值。显然,这并不能给出令人满意的结果 我发现了虚拟机。它有一个基本的内置调试器,可以设置数据断点并停止程序。但我似乎无法在那一点上产生中断 bochs允许将gdb连接到它。不过,我还不能用gdb支持来构建它 其他想法: 一种“预览指令”中断,在执行之前触发每条指令。这组使用过的内存写入指令应该是相当容易管理的,但我认为提取地址仍然是一个PI
- 测试计时器ISR中的值。显然,这并不能给出令人满意的结果
- 我发现了虚拟机。它有一个基本的内置调试器,可以设置数据断点并停止程序。但我似乎无法在那一点上产生中断
- bochs允许将gdb连接到它。不过,我还不能用gdb支持来构建它
- 一种“预览指令”中断,在执行之前触发每条指令。这组使用过的内存写入指令应该是相当容易管理的,但我认为提取地址仍然是一个PITA。我认为没有这种干扰
- 一种“预览内存访问”中断。再说一次,我认为它不在那里
- 滥用寻呼。将感兴趣的页面标记为不存在,并在页面错误处理程序中测试地址。我们仍然需要区分读操作和写操作,我认为,页面错误处理程序不知道确切的地址,只知道页码
0x0000003
设置了DR7
,用地址设置了DR0
。这应该是一个单字节长度的数据断点,但不会触发。DR0
所指的值发生更改。我必须启用什么吗?@kiw由于DR7的第16位和第17位是0,所以您有一个执行断点。您希望将位16设置为只写断点,因此DR7应该是0x00010303
。。。该死的运算符优先级<代码>(答案是指向不再包含相关信息的文件的链接,这很可能在该文档的第2部分中。(它在索引中,但本文档在第13章结束,远远早于现在的第17章。)