Windows下使用Gflags检查内存越界
环境:windows xp. vs2005
Gflags可用于查找内存越界的问题。
访问一块申请的内存时,当访问的地址超过申请的范围时,就发生了内存越界的问题。
编写测试程序MemoryOverflow.exe。在程序中,Fun函数使用new申请了16个字节的内存,因此p[0]~p[15]都是可访问的合法地址。
#include <iostream>
using namespace std; int Fun()
{
char *p = new char[];
memset(p, 0x00, *sizeof(char)); p[] = ; //合法改写
p[] = ; //合法改写
p[] = ; //越界,delete可检查出来
p[] = ; //越界,delete可检查出来
p[] = ; //越界,delete可检查出来
p[] = ; //越界,delete可检查出来
p[] = ; //越界,Gflags可检查出来 delete p;
p = NULL; return ;
} int main()
{
Fun(); return ;
}
在VS2005Debug模式下,每次使用new申请一块内存时,会多出36个字节,其中32个字节在P的前面,4个字节在p的后面。后面4个字节保护区以0xFD进行填充。如果p后面的4个字节被改写掉,则在delete时会校验失败。
发生内存越界时,一般不会有异常发生,而是可能在后面的代码中发生异常。Gflags能在发生内存越界时,就立即提示出来。
Gflags会在用户申请的内存后面分配一个保护区(一般是一个虚拟页,写保护属性),一旦发生内存越界,就会触发中断,定位发生内存越界的代码行。
在命令行中输入指令:Gflags.exe /p /enable MemoryOverflow.exe /full /unaligned //非对齐方式完全启用page heap
使用VS2005调试MemoryOverflow.exe,当执行到 p[20] = 7; 时,就会提示内存越界了。
Windows下使用Gflags检查内存越界的更多相关文章
- 使用PageHeap.EXE或GFlags.EXE检查内存越界错误 (转)
2011-05-27 20:19 290人阅读 评论(0) 收藏 举报 microsoftdebuggingstructureoutputimagefile 必先利其器之一:使用PageHeap.EX ...
- 使用PageHeap.EXE或GFlags.EXE检查内存越界错误
必先利其器之一:使用PageHeap.EXE或GFlags.EXE检查内存越界错误 Article last modified on 2002-6-3 ------------------------ ...
- Windows下使用Gflags和UMDH查找内存泄漏
GFlags和UMDH与WinDbg一样,都是Debugging Tools for Windows里的工具. 1.设置符号路径 去微软官网下载对应的操作系统的符号安装文件,并安装到某个目录,如C:\ ...
- CheckTimeWait.bat实现windows下的TimeWait检查
原文链接: http://www.lookdaima.com/WebForms/WebPages/Blanks/Pm/Docs/DocItemDetail.aspx?id=c7bff196-cd9c- ...
- GFlags 处理内存越界、野指针问题研究
从官方文档可以看到,从gflags的GUI上,我们是无法判断他打开的是full page heap verification 还是Standard page heap verification, 所以 ...
- windows下程序启动检查,只启动一个实例
问题来源:http://bbs.csdn.net/topics/390998279?page=1#post-398983061 // Only_once.cpp : 定义控制台应用程序的入口点. // ...
- 【问】Windows下C++局部变量在内存中的分布问题
原本是为了看看C++对象模型中子对象赋值给一个父对象和父类型指针指向的域时,到底会不会切割,就打开codebloks写了下面的代码,编译器选的是GNU. #define DEBUG(X) std::c ...
- Windows下C/C++内存泄露检测机制
1.概述 在Windows下微软给我们提供了一个十分强大的C/C++运行时库,这个运行时库中包含了很多有用的功能.而众多强大功能之一就是内存泄露的检测. C/C++提供了强大的内存管理功能,不过随之而 ...
- windows下使用adb工具查看android程序cpu和内存消耗情况
在实际的开发当中,尤其软件运行在一个硬件设备比较差的环境下,对软件占用资源大的问题是开发者们必须要解决的问题,系统比较卡.觉得应该看看程序的cpu和内存消耗 一直以来都在windows下编程,已经习惯 ...
随机推荐
- Docker搭建本地私有仓库
安装部署一个私有的Docker Registry是引入.学习和使用Docker这门技术的必经之路之一.尤其是当Docker被所在组织接受,更多人.项目和产品开始接触和使用Docker时,存储和分发自制 ...
- Hadoop-2.2.0中文文档—— Shell命令
FS Shell 调用文件系统(FS)Shell命令应使用 bin/hadoop fs <args>的形式. 全部的的FS shell命令使用URI路径作为參数.URI格式是scheme: ...
- 将多个文件夹内的txt合并
import os import re def text_create(name): """ 创建txt文件夹 """ desktop_pa ...
- ParagraphFormat 对象【精品】
ParagraphFormat 对象 贡献者:motolola 日期:2009-05-27 阅读:5261 回复: 相关标签:wps > API > paragraphfo ...
- The Tao Of Programming翻译
The Tao Of Programming里面有许多道家思想,我也喜欢道家学说, 萌生了用文言文翻译的想法,不足之处还请方家指正. 翻译后的文档放在gitcafe上了,欢迎大家fork修正.
- 决Ubuntu使用`make menuconfig`配置Linux 内核时,出现缺少'ncurses-devel'库支持。
*** Unable to find the ncurses libraries or the *** required header files. *** 'make menuconfig' req ...
- PHP——自定义函数
<?php //定义有默认值的函数 function Main3($f=5,$g=6) { echo $f*$g; } Main3(2,3); echo "<br />&q ...
- Streams:深入剖析Redis5.0全新数据结构
Streams:深入剖析Redis5.0全新数据结构 原创: 阿飞的博客 Redis 5.0 全新的数据类型:streams,官方把它定义为:以更抽象的方式建模日志的数据结构.Redis的st ...
- selenium 获取按钮的笔记
测试odoo时,发现大部分按钮都是动态生成,id也是动态的, 只能用xpath,但是配置一旦改变导致按钮位置改变 想到一个办法,遍历所有按钮,然后内容相符的才点击,测试代码如下 submit_loc ...
- sours insight 使用技巧
最终在团队的气氛下还是拿回了source insight编译器: Source Insight实质上是一个支持多种开发语言(java,c ,c 等等)的编辑器,只不过由于其查找.定位.彩色显示等功能的 ...