首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Windows GFlags应用程序进行堆损坏检测

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

Stack Overflow用户
提问于 2017-03-15 16:30:26
回答 1查看 657关注 0票数 0

我正在尝试为一个使用GFlags的小型应用程序启用页面堆,但由于某些原因,它不起作用。

我已经写了一个小的C++应用程序,它所做的一切都是破坏堆内存:

代码语言:javascript
复制
int* a;
a= (int*)malloc(1);
*a= 8888800;
return 0;

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

我怀疑我没有正确激活GFlags,但是找不到问题所在。在运行图像文件选项卡中的GFlags可执行文件后,我将路径复制到可执行文件中,并标记了启用页堆和异常时停止选项。我签入了CMD,并看到页面堆已启用。可能的问题是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-18 00:45:44

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

就像这样

代码语言:javascript
复制
int* a;
a= (int*)malloc(1);
*(a+4096)= 8888800;
return 0;

应该可以工作(未测试)。

请记住,打开页堆时,堆上的每个变量都需要8 kB的内存:4 kB用于变量所在的可访问页,4 kB用于随后的受保护页。

因此,总而言之,页面堆对于生产中的应用程序不是一个好主意,但对于小型测试应用程序可能不是一个好主意。需要确定缓冲区溢出(或欠载运行)的地方。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42804544

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档