gpt4 book ai didi

c++ - 使用 Windows GFlags 应用程序进行堆损坏检测

转载 作者:行者123 更新时间:2023-11-28 05:15:11 33 4
gpt4 key购买 nike

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

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

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

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

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

最佳答案

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

有点像

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

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

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

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

关于c++ - 使用 Windows GFlags 应用程序进行堆损坏检测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42804544/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com