【发布时间】:2013-01-30 03:03:54
【问题描述】:
阅读this interesting article 概述了一种调试堆损坏的技术后,我开始想知道如何根据自己的需要对其进行调整。基本思想是提供一个自定义的 malloc() 来分配整个内存页面,然后为这些页面启用一些内存保护位,以便程序在被写入时崩溃,并且可以在该行为中捕获有问题的写入指令.示例代码是 Linux 下的 C(mprotect() 用于启用保护),我很好奇如何将其应用于本机 C++ 和 Windows。 VirtualAlloc() 和/或 VirtualProtect() 看起来很有希望,但我不确定使用场景会是什么样子。
Fred *p = new Fred[100];
ProtectBuffer(p);
p[10] = Fred(); // like this to crash please
我知道在 Windows 中存在用于调试内存损坏的专用工具,但我仍然很好奇是否可以使用这种方法“手动”完成。
编辑:另外,这在 Windows 下是一个好主意,还是只是一个有趣的智力练习?
【问题讨论】:
标签: c++ winapi memory-management heap-corruption