所以我正在为一个安全类做一个赋值,并且赋值是使用堆栈溢出来调用从未使用它的函数oopsDidISmashTheStack。
#include <stdio.h>
#include <stdlib.h>
int oopsDidISmashTheStack(void)
{
printf("Yup, smashing the stack is fun!\n");
exit(0);
}
int getUserInput (void)
{
char buf[12];
gets(buf);
return(1);
}
int main(void)
{
getUserInput ();
printf("Overflow failed, normal return\n");
return(1);
}
我理解了buf变量之后的概念是sfp然后返回地址我想不到的是将返回值更改为地址0x080484fc的输入,这是函数所在的位置。我认为它需要12个字符来填充缓冲区,然后我的印象是sfp并返回4个字节,所以我试图用另外4个随机字符填充sfp然后使用\ xfc \ x84 \ x04 \ x08来制作返回地址指向函数。
如果有人熟悉堆栈内存是如何工作的,并且可以解释我哪里出错那会很棒?
答案 0 :(得分:0)
你几乎走在正确的轨道上。我建议你查看堆栈,看看返回地址是否在你认为的位置。那里可能还有别的东西。还要仔细检查内部性,
我认为这是你的输入字符串?
“012345678901xxxx \ XFC \ X84 \ X04 \ X08”
你的程序输出是什么,一般来说,如果你已经关闭但是程序崩溃得不是很正确:)