使用Windows GFlags应用程序检测堆损坏

我试图为使用GFlags的小应用程序启用页堆,但由于某些原因,它不起作用。

我写了一个小的C ++应用程序,它所做的只是损坏了堆内存:

int* a;
a= (int*)malloc(1);
*a= 8888800;
return 0;

运行此代码时,应用程序不会崩溃。 但是,在启用页面堆的情况下,我期望它在第三行。

我怀疑我没有正确激活GFlags,但无法弄清楚问题所在。 在图像文件选项卡中运行GFlags exe后,我将路径复制到我的exe文件并标记为启用页堆并停止在异常选项上。 我检查了CMD并看到页面堆已启用。 可能是什么问题呢?


页面堆意味着在变量所在的页面后面有一个受保护的页面。这也意味着您必须访问该受保护页面中的内存才能使其崩溃。 你没有编写足够的数据来达到页面的末尾。

就像是

int* a;
a= (int*)malloc(1);
*(a+4096)= 8888800;
return 0;

应该工作(未测试)。

请记住,当页堆启用时,堆上的每个变量都需要8 kB的内存:4 kB用于变量处于可访问页的位置,后面是受保护页的4 kB。

总而言之,页面堆并不是生产应用程序的好主意,但可能适用于小型测试应用程序。 您需要确定缓冲区溢出(或欠载)。

链接地址: http://www.djcxy.com/p/82349.html

上一篇: Heap corruption detection with Windows GFlags application

下一篇: Simulate CPP heap corruption