Smashing the Stack

Smashing the Stack

本文关键字:Stack the Smashing      更新时间:2023-10-16

所以我正在为一个安全类做一个赋值,赋值是使用堆栈溢出来调用从未使用它的程序函数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 returnn");
    return(1);
}

我理解 buf 变量之后的概念是 sfp,然后是返回地址,我无法弄清楚的是将返回值更改为函数所在的地址0x080484fc输入。我认为填充缓冲区需要 12 个字符,然后我的印象是 sfp 并返回 4 个字节,所以我尝试用另外 4 个随机字符填充 sfp,然后使用 \xfc\x84\x04\x08 使返回地址指向函数。

如果有人熟悉堆栈内存的工作原理并且可以解释我出错的地方,那就太好了?

你几乎走在正确的轨道上。 我建议你看看堆栈,看看返回地址是否在你认为的位置。 里面可能还有其他东西。 还要仔细检查终点,

我假设这是您的输入字符串?

"012345678901xxxx\xfc\x84\x04\x08"

程序

的输出是什么,通常如果您很接近但不太正确,程序会崩溃:)