有谁用过gflags检测内存越界或堆栈异常?

dahaiI0 2012-04-05 10:56:21
操作顺序如下
打开gflags.exe
切换到Image File tab
输入EXE名,test.exe,然后按下TAB键
勾中Enable page heap等选项
点确定

然后debug下运行test.exe,代码很少,但是没有被中断下来,不知道是用法有问题还是这个gflags没有说的那么牛。
char *p=new char[10];
for(int i=0;i<10;++i)
p[i]=i;
p[100]=10;
百度谷歌上搜到的相关博客大都是用命令行操作的,照着输入一样木有被中断下来。
...全文
666 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiucaijiang 2012-08-14
  • 打赏
  • 举报
回复
  我知道了
在命令行cmd里输入:cdb -iae 。

  设置cdb为默认JIT(just in time) debugger,这样在命令行执行遇到崩溃的时候就会停下来
xiucaijiang 2012-08-14
  • 打赏
  • 举报
回复
gflags -p 已经检测到绑定exe成功,但是对于越界访问怎么都检测不到啊?
dahaiI0 2012-04-05
  • 打赏
  • 举报
回复
试过了,效果一样,程序直接挂了,挂在全局对象app的构造处,不知道是有局限性还是配置什么的有问题,算了,先这样能检测一部分也算不错了。
dahaiI0 2012-04-05
  • 打赏
  • 举报
回复
把安装目录添加到环境变量中,cmd下
gflags /p/enable test.exe/full/unaligned
然后再输入gflags /p查看enable的进程,结果木有任何显示。
dahaiI0 2012-04-05
  • 打赏
  • 举报
回复
顺便吐槽下CSDN的搜索功能,搜出来10多个链接都是同一个帖子,这10多个链接里发帖人居然还能不同,真是强大啊。
dahaiI0 2012-04-05
  • 打赏
  • 举报
回复
名字输入正确。。
另外是不是有注册表的监控软件,额。。这个是什么意思。
draracle 2012-04-05
  • 打赏
  • 举报
回复
global flags作用是很明显的。

page heap的具体作用是将每一个内存分配都对齐到两个页之间,保证内存缓冲区之前和之后都是未分配的区域。因此,只要写入这些区域,就会触发内存存取异常。

这个工具在调试堆内存错误时非常有用,但是就是非常耗内存。

你的这个代码我测试了,在我的机器上触发了。

你需要检查你输入的test.exe名字是否正确,另外是不是有注册表的监控软件。
draracle 2012-04-05
  • 打赏
  • 举报
回复
你试试release版。
dahaiI0 2012-04-05
  • 打赏
  • 举报
回复
恩,如果在不改变成1字节对齐的前提下,能否检测出6楼给的代码这种情况下的越界操作,我用了/unaligned木有效果。
draracle 2012-04-05
  • 打赏
  • 举报
回复
看你的编译器。有些时候分配内存会以4字节对准。
dahaiI0 2012-04-05
  • 打赏
  • 举报
回复
恩,没写入到注册表,关了几个有嫌疑的软件后,写入了,也检测到了,但在字节对齐下不够精准,比如
char *p = new char[5];
p[5] = 'a';
这种就检测不出来,即使在cmd下输入了 .../full /unaligned也木有效果,请问下楼上的,你那能检测出这种情况下的吗
draracle 2012-04-05
  • 打赏
  • 举报
回复
其实gflags就是一个注册表的修改程序。

你对某个程序开启page heap,那么就把这个程序的名字写入注册表。
系统只管进程的文件名,不管位置。

你现在的情况,我估计是你有什么防火墙一类的软件把写注册表的操作拦截了。

1,649

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 非技术类
社区管理员
  • 非技术类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧