(转载)有关win32平台下调试堆的描述(Win32 Debug CRT Heap) (实战篇)
此篇文章转载自RasAsm吧主的一篇技巧性文章,刚好弥补了上述知识所欠缺的实践部分:
http://tieba.baidu.com/p/1945193319
//**************************************************************
//malloc错误使用的调试
//环境:VC6.0 XP SP3
//作者:bingghost
//邮箱:bingghost@gmail.com
//版权所有,转载是请注明出处
//**************************************************************
学c的童鞋们经常都会用到malloc, 申请 释放的代码写的不规范,就很容易产生内存的非法访问,那么当我们代码写了很多行之后又该如何去调试并发现错误呢?
下面以VC环境为例.....
(1)首先构造代码如下,假定每行中间代码很多
假定代码多到你无法在短时间用肉眼看出来.......
(2)编译连接如上代码,运行出错…
(3)点”重试”,在点”取消”进入调试模式
或者下断点后 调试运行
(4).查看栈窗口,回溯到上个窗口,发现代码报错地点
(5).看到free估计psz是一个堆指针,观察其堆结构
发现堆结构被破坏
(6).所以现在要开始找,到底是谁破坏了堆结构
转到psz定义的地方(VC助手快捷键 Alt + G)
(7)对其下内存写入断点
方法 Edit->Breakpoint->Data
(8)F5运行,程序断下来
(9).观察代码和内存值---发现里面刚刚存入堆的地址
(10),查看堆结构,发现并未被破坏
(11)用上面同样的方式下内存写入断点,这个时候注意 是对下溢标记下断点
(12).程序成功断下来 ,发现断在汇编窗口里面了
(13)回溯栈窗口,找到出错点,发现是其长度不够,导致的堆下溢
(14)修改代码,程序成功执行
(15).总结:
类似的内存访问错误,均可采用此手法找错
posted on 2012-10-27 09:51 coolhysteria 阅读(561) 评论(0) 编辑 收藏 举报