stackoverflow报错 什么是“栈溢出”和“堆溢出”?
浏览量:2474
时间:2021-03-16 13:59:06
作者:admin
什么是“栈溢出”和“堆溢出”?
堆栈溢出是由于C语言系列没有内置的检查机制,以确保复制到缓冲区的数据不能大于缓冲区的大小,因此当数据足够大时,它会溢出缓冲区的范围。堆溢出是由太多的函数调用引起的,这使得调用堆栈无法保存这些调用的返回地址。堆溢出可能是由无限递归引起的,但也可能是堆栈级别太多。堆溢出比较复杂,因为各种环境堆的实现并不完全相同。但是,程序管理堆必须有额外的数据来标记各种堆信息。如果堆内存按上述方式分配,可能会破坏堆的逻辑结构。然后修改无法访问的数据。Int f(char*s,Int n){char a[10]memcpy(a,s,n)。。。这是一个更真实的堆栈溢出示例。如果传入数据的长度大于10,则会导致溢出并更改F的返回地址。只要预先将恶意代码写入特定的地址,就会执行该代码。
版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。