关于mfc 中使用gflags检测内存越界的问题
来源:互联网 发布:网络直播用什么技术 编辑:程序博客网 时间:2024/05/22 17:27
下载windbg,安装目录下有gflags.exe,用它来配置完全页堆,首先命令行定位gflags.exe的目录,输入gflags.exe /p /enable xxx.exe /full /unaligned,说明使用完全页堆,且内存申请不对齐,保证只要一越界就可以检测出来。因为内存申请一般是会对齐的,例如8字节对齐,我new一个字节的内存,那么从这个字节打后7个字节我都是可以写入的,而程序运行起来不会报错,使用 /unaligned是保证不会出现上面说的这种情况。
实验中用VS2008写了一个mfc程序,测试代码如下:
int i = 0;char *pptr = new char[10];for (int i = 0; i <11;i++){pptr[i] = 0;}
在i = 10时,写入越界了。
编译成Release版本(Debug版本貌似检测不出来),用gflags配置了完全页堆后,在VS中运行程序却发现崩溃在了Cheap_TestApp theApp;这句中,如果不加/unaligned的话就能运行程序,但是却检测不出写入越界。后来尝试:在项目属性里配置“在静态库中使用MFC”,同时在C/C++属性页的代码生成项的运行库子项改为多线程调试MT,就可以运行且能在越界的地方中断了。
需要注意的是,完成调试后,要恢复原来的配置:命令行到windbg的安装目录,输入gflags.exe /p /disable xxx.exe。可以使用gflags.exe /p 来查看当下有哪些程序被gflags配置着。在注册表里:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options 下面的xxx.exe子项要删除,本人在实验中没有删除注册表的配置信息,再开机就蓝屏了,也不知道跟这个有没有关系。后来在“上一次正常配置”进了系统把注册表信息删除了就好了。
- 关于mfc 中使用gflags检测内存越界的问题
- 使用GFlags检测内存越界访问
- 介绍两个检测内存越界的工具pagehedap和gflags
- gflags 检查内存越界
- 关于内存越界的问题
- GFlags 检查内存越界、野指针等作用的工具使用
- GFlags 检查内存越界、野指针等作用的工具使用
- 使用PageHeap.EXE或GFlags.EXE检查内存越界错误
- 使用PageHeap.EXE或GFlags.EXE检查内存越界错误
- 关于MFC的CString 访问越界问题
- window下快速发现内存越界的工具(gflags)
- 关于C++内存越界访问的问题
- 使用Gflags来检测heap问题
- 【原】使用Gflags来检测heap问题
- 使用Gflags来检测heap问题
- 使用Gflags来检测heap问题
- 使用Gflags来检测heap问题
- [转]使用Gflags来检测heap问题
- Unity入门操作_积木_009
- centos7编译openjdk8
- 策略模式在Android中的应用
- 快速排序算法学习
- C语言习题
- 关于mfc 中使用gflags检测内存越界的问题
- 网络编程之并发服务器(线程,进程)
- UVALive 7483
- JAVA SE、JAVA EE、JAVA ME各包含JAVA哪面内容
- 内存管理之MMU实验
- 算法(一):选择排序和冒泡排序
- java实现吃货联盟订餐系统_学习笔记
- 输出最少花费的祝福值
- poj-2230- Watchcow