如何检测错误写入

How to Detect Wrong Write

本文关键字:错误 检测 何检测      更新时间:2023-10-16

在我的代码中,我有一个对象的内容完全是垃圾。我猜在代码的其他部分发生了错误的写入,幸运的是,它写入了我提到的对象的地址。

我想知道是否有什么工具可以告诉我内存地址收到的每一次写入,这样我就可以跟踪这个错误的起源。

大多数调试器都支持写入时的断点。

例如,在visual studio中,您必须在调试器中启动应用程序,插入(在接近可疑变量初始化的正常断点上),然后转到菜单中的"调试/新断点/新数据断点"。

在SoftIce中,您可以使用BPM命令。:)这也可能破坏内存访问。

根据您的平台,您应该能够使用VirtualProtect之类的东西锁定该内存区域(我认为它在linux上是mprotect)。这样,当内存区域被不正确地访问时,您将得到accessviolation/segfault。当您得到accessviolation/segfault时,您可以在调试器中捕获它们。

然而,要锁定内存区域,通常区域应该与内存页对齐(至少在窗口上),这可能是一个问题。

除此之外,您还可以在调试器中使用数据断点。

如果您在Windows上,您可以使用全局标志(gflags.exe,Windows调试工具的一部分)并打开PageHeap。(在"图像"选项卡上,键入.exe的名称,然后在它出现时单击"启用页面堆"复选框。)然后运行程序。

只要记得做完后再把它关掉。