gpt4 book ai didi

c - 堆栈溢出损坏 %ebp

转载 作者:太空狗 更新时间:2023-10-29 15:26:44 24 4
gpt4 key购买 nike

我正在努力为考试而学习,并查看堆栈溢出的东西,我希望有人能为我解决一些问题。 (假设这是在 32 位系统上,所以所有地址都是 4 个字节。另外我正在从 C 函数研究它,所以引用的任何代码都来自 C)

假设我们的代码想从标准输入中获取 buf[4],因此它创建了一个四字节缓冲区。如果我们使用不检查越界的 gets() 版本,并输入字符串“12345”,我们将破坏堆栈上保存的 %ebp。但是,这不会更改返回地址。这是否意味着程序将继续执行正确的代码,因为返回地址是正确的,并且它仍将返回调用函数?或者损坏的 %ebp 是否意味着进一步的麻烦。

我知道如果我们输入更大的东西,比如“123456789”,它也会破坏返回地址,从而使程序无法运行。

最佳答案

EBP 是当前栈帧的基指针。一旦您用新值覆盖该基指针,后续对堆栈中项目的引用将引用的不是堆栈的实际地址,而是您刚刚覆盖的地址。

程序的进一步行为取决于堆栈随后是否以及如何在代码中使用。

关于c - 堆栈溢出损坏 %ebp,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20665996/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com