以前有时在带有简单 MMU 的嵌入式系统上工作时,我曾经动态地对该 MMU 进行编程以检测内存损坏。
例如,在运行时的某个时刻, foo 变量被一些意外数据覆盖(可能被悬空指针或其他)覆盖。所以我添加了额外的调试代码:
- 在初始化时,foo 使用的内存被指示为 MMU 的禁止区域;
- 每次故意访问 foo 时,访问该区域之前是允许的,之后是禁止的;
- 添加了一个 MMU irq 处理程序来转储主机和负责违规的地址。
这实际上是某种观察点,但直接由代码本身自行处理。
现在,我想在 x86 平台上重用相同的技巧。问题是我离理解 MMU 在这个平台上是如何工作的,以及它是如何被 Linux 使用的,但我想知道是否已经存在任何库/工具/系统调用来处理这个问题。
请注意,我知道存在各种工具,如 Valgrind 或 GDB 来管理内存问题,但据我所知,这些工具都没有被调试代码动态重新配置。
我主要对 Linux 下的用户空间感兴趣,但也欢迎任何有关内核模式或 Windows 下的信息!