2

要求:

当内存位置更改或写入时,我需要生成中断。在 ISR 中,我可以触发蓝屏,它会为我提供带有方法名称的漂亮堆栈跟踪。

方法:

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

其他想法:

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

1 回答 1

7

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

于 2011-05-08T00:10:46.830 回答