在函数 A() 调用函数 B() 期间,B() 分配一个 100 个字符的数组并多次填充它,其中一次使用 101 个字符的字符串,一次使用 110 个字符的字符串。这是一个明显的错误。
随后,函数 A() 尝试访问完全不相关的 int 变量 i,并发生分段错误。
我明白为什么会发生缓冲区溢出,但是为什么当我访问这个整数时会出现分段错误?为什么我不简单地获取垃圾数据?
缓冲区溢出可能会破坏堆栈上先前保存的帧指针版本。
当函数返回时,这个损坏的版本将被加载到帧指针寄存器中,从而导致您所描述的行为。
维基百科的页面包含一个图和定义。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)