首先来看下问题代码,这里最后的空字符发生了溢出。
来看一下出现的问题以及如何调试。
上面写明是堆链中第41个堆块且地址在0x00382a700出发生了错误。这种情况下别急着终止,点击重试就会断在出问题的位置。
点重试后断到了这里
往上拉一拉,寻找函数名,或者直接查看调用堆栈发现是断在_free_dbg函数中,这个函数是free()的底层,所以可以断定一定是释放的时候出了问题
直接在free()函数上下断点然后运行过去,发现第41块堆块的下溢标志受损了。就是strcpy导致的。
为了验证这一个结果, 我们下一个数据执行断点。可以判定什么时候数据被修改。首先重新调试,步过malloc后目标字节变成了0XDF。到这里位置一切正常
选择Edit后选择BreakPoints,准备设置数据执行断点
我们把那个被覆盖的位置的地址输入
最后,看见了吧,当我设置了这个断点后就不存在之前的问题了。
而当我没有设置的时候这里却被改变。
(完)
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/34687.html