我试图粉碎堆栈并使用下面的C代码:
#include<stdio.h>
get_inp()
{
char buf[8];
gets(buf);
puts(buf);
}
main(){
get_inp();
return 0;
}
只有在输入最少16个字符时才会出现Segmentation故障。在IA-32架构上运行此功能。由于EBP在分配的缓冲区之后占用4个字节,因此在输入12个字符后我不会得到seg错误。希望对此有所清晰。
答案 0 :(得分:0)
为什么过度编写保存的ebp会产生分段错误?它很可能永远不会再使用。 你的sigsegv的一个可能原因是覆盖了返回地址。故障地址是否与您输入的ascii值相似(尝试输入UUU..UU;您是否在0x55555555处输入错误?)