繁体   English   中英

Stack Overflow损坏%ebp

[英]Stack Overflow corrupt %ebp

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

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

据我所知,如果我们输入更大的内容,如“123456789”,它也会破坏返回地址,从而导致程序无法运行。

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

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

严重损坏的内容在很大程度上取决于生成的代码,因此这取决于编译器和设置。 你也不知道真的ebp是否会被破坏。 通常编译器会在变量中添加额外的字节,因此在一个字节溢出时根本不会发生任何事情。 在较新的Visual Studio代码中,我看到添加了一些安全保护代码,这会导致抛出异常。

如果返回地址已损坏,则可以将其用作安装自己的代码的漏洞的入口点。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM