我想问是否有人知道如何检测 alloc 内存地址上的写入。
起初,我使用 mprotect 和 sigaction 在进行写入/读取操作时强制出现分段错误。
这种方法的两个负面因素是几个:
- 是难以通过的分段错误
- MPeFix 中的内存地址传递必须与页面边界对齐,即无法使用简单的 malloc 处理此内存地址。
澄清问题:
我用 C 语言为群集环境构建了一个应用程序。在某些时候,我分配了在本地主机中调用缓冲区的内存并分配了一些数据。此缓冲区将发送到远程节点,并具有相同的过程。同时,此缓冲区将在远程节点中写入/读取,但我不知道何时(它将用于DMA写入/读取缓冲区(,必须通知本地主机有关缓冲区修改的信息。就像我上面说的,我已经使用了一些机制,但没有一个它能够以某种能力处理它。现在我只是想要一些想法。
这里欢迎每一个不同的想法。
谢谢
可以使用硬件断点。缺点是这是特定于硬件的,只能设置有限数量的断点。此外,大多数情况下,此类工具不是特定于任务的,因此如果您运行该程序的多个实例,它们将共享可用"插槽"的数量。
x86 体系结构具有可用于设置硬件内存断点的调试寄存器(请参阅:http://en.wikipedia.org/wiki/X86_debug_register(。
如果要对此进行测试,可以使用 GDB 设置硬件断点。您可以使用 GDB 的"watch"命令在变量上放置硬件内存断点。
请注意,使用调试寄存器和mprotect()
只是完成您要求的工作的方法,我认为它们不是进行内存管理的合理工程实践(您可能尝试在这里执行的操作(。也许你可以更多地解释一下你想在更高层次上做的事情:http://catb.org/esr/faqs/smart-questions.html#goal