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