3

我想问一下是否有人知道如何检测分配内存地址上的写入。

起初,我使用 mprotect 和 sigaction 在进行写/读操作时强制出现分段错误。

这种方法有两个负面因素:

  • 是难以通过分段错误
  • mprotect 中的内存地址传递必须与页面边界对齐,即不可能使用简单的 malloc 处理此内存地址。

为了澄清问题:

我在 C 中为集群环境构建了一个应用程序。在某些时候,我分配了我在本地主机中调用缓冲区的内存并分配了一些数据。该缓冲区将被发送到远程节点并具有相同的过程。同时,该缓冲区将在远程节点中写入/读取,但我不知道何时(它将使用 DMA 写入/读取缓冲区),必须通知本地主机有关缓冲区修改。就像我上面说的,我已经使用了一些机制,但没有一个能够以某种能力处理它。现在我只是想要一些想法。

这里欢迎每一个不同的想法。

谢谢

4

1 回答 1

1

您可以使用硬件断点。缺点是这是特定于硬件的,只能设置有限数量的断点。而且大多数情况下,此类设施不是特定于任务的,因此如果您运行程序的多个实例,它们将共享可用“插槽”的数量。

x86 架构具有调试寄存器,可用于设置硬件内存断点(参见:http ://en.wikipedia.org/wiki/X86_debug_register )。

如果您想对此进行测试,您可以使用 GDB 设置硬件断点。您可以使用 GDB 的“watch”命令在变量上放置硬件内存断点。

请注意,使用调试寄存器mprotect()只是完成您要求的工作的方法,我认为它们不是进行内存管理的合理工程实践(您可能在这里尝试做的事情)。也许您可以在更高级别上解释一下您尝试做的事情:http: //catb.org/esr/faqs/smart-questions.html#goal

于 2012-05-22T13:39:24.563 回答