首页
社区
课程
招聘
分析堆栈损坏:Critical error detected c0000374
发表于: 2024-1-19 12:12 4379

分析堆栈损坏:Critical error detected c0000374

2024-1-19 12:12
4379

背景


昨天朋友问到是否有0xc0000374的堆栈损坏的排查经验。平时遇到堆栈损坏的问题不少,还真没有留意某一个错误码的堆栈损坏。好巧不巧,下班的时候就碰到同事遇到了同样的问题。

分析问题

  1. 复现问题

    每次崩溃的地址是在这里,观察对象内存,没有发现内存无法读取或者乱码类的数据,看起来是正常的.根据反汇编代码知道崩溃就发生在delete这个调用中,也就是CShape所指向对象的析构中.

  2. 分析问题
    分析对象的内存,发现了一些崩溃之前对象内存的特征码,然后设置条件断点。


    F11步入

    发现该对象的析构竟然直接进入了基类析构,而不是派生类对象的析构函数,明显是有问题的.所以怀疑该对象已经内存遭到了损坏.
    于是加入了监视对象内存的情况:


    显而易见的Double Free.

总结

这里的问题还是比较简单的,毕竟内存破坏是在比较近的区域。接下来和同事分析了一下可能存在double free的代码,很快定位出了具体的问题出处。这是基于源码分析的,如果无源码的话,得想一种办法,记录程序运行过程中访问的内存,这样才好溯源.本片文章就暂时记录这里,后续看看是否能使用内存搜索的方式定位嫌疑位置.


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 2
支持
分享
最新回复 (1)
雪    币: 2948
活跃值: (30846)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
感谢分享
2024-1-21 20:57
1
游客
登录 | 注册 方可回帖
返回
//