0

我正在尝试粉碎堆栈并使用以下 C 代码:

#include<stdio.h> 

get_inp()
{
char buf[8];
gets(buf);
puts(buf);
}

main(){
get_inp();
return 0;
}

仅当我输入至少 16 个字符作为输入时,才会出现分段错误。在 IA-32 架构上运行它。由于 EBP 在分配缓冲区后占用 4 个字节,因此我在输入 12 个字符后不应该出现 seg 错误。希望对此有所澄清。

4

1 回答 1

0

为什么覆盖保存的 ebp 会产生分段错误?很有可能它永远不会再次使用。您的 sigsegv 的一个可能原因是覆盖了返回地址。故障地址是否看起来像您输入的 ascii 值(尝试输入 UUU..UU;您是否在 0x55555555 出现故障?)

于 2018-04-14T21:51:09.740 回答