网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
08月27日漏签0天
radasm吧 关注:747贴子:901
  • 看贴

  • 图片

  • 吧主推荐

  • 游戏

  • 3回复贴,共1页
<<返回radasm吧
>0< 加载中...

内存非法访问2例-----[1:malloc]

  • 只看楼主
  • 收藏

  • 回复
  • bingghost
  • 英雄豪杰
    10
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
//**************************************************************
//malloc错误使用的调试
//环境:VC6.0 XP SP3
//作者:bingghost
//邮箱:bingghost@gmail.com
//版权所有,转载是请注明出处
//**************************************************************
学c的童鞋们经常都会用到malloc, 申请 释放的代码写的不规范,就很容易产生内存的非法访问,那么当我们代码写了很多行之后又该如何去调试并发现错误呢?
下面以VC环境为例.....
(1)首先构造代码如下,假定每行中间代码很多

假定代码多到你无法在短时间用肉眼看出来.......

(2)
编译连接如上代码,运行出错…


(3)
点”重试”,在点”取消”进入调试模式
或者下断点后 调试运行

(4).查看栈窗口,回溯到上个窗口,发现代码报错地点

(5).看到free估计psz是一个堆指针,观察其堆结构



  • bingghost
  • 英雄豪杰
    10
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

发现堆结构被破坏

(6).所以现在要开始找,到底是谁破坏了堆结构
转到psz定义的地方(VC助手快捷键 Alt + G)

(7)对其下内存写入断点
方法 Edit->Breakpoint->Data

(8)F5运行,程序断下来


(9).观察代码和内存值---发现里面刚刚存入堆的地址

---------------------------------------
楼下继续......




2025-08-27 14:34:54
广告
不感兴趣
开通SVIP免广告
  • bingghost
  • 英雄豪杰
    10
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
(10),查看堆结构,发现并未被破坏

(11)用上面同样的方式下内存写入断点,这个时候注意 是对下溢标记下断点

(12).程序成功断下来 ,发现断在汇编窗口里面了

(13)回溯栈窗口,找到出错点,发现是其长度不够,导致的堆下溢

(14)修改代码,程序成功执行

(15).总结:
类似的内存访问错误,均可采用此手法找错





  • bingghost
  • 英雄豪杰
    10
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
当然 你还的需要知道Debug版本的堆结构
Debug版本堆结构传送门:
http://tieba.baidu.com/p/1914056824
还一个结构体 请看回复的 那个人的blog


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 3回复贴,共1页
<<返回radasm吧
分享到:
©2025 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示