gpt4 book ai didi

c++ - 粉碎堆栈

转载 作者:太空宇宙 更新时间:2023-11-04 14:01:37 28 4
gpt4 key购买 nike

所以我正在处理一个安全类的作业,作业是使用堆栈溢出来调用程序中从未使用过的函数 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 来制作返回地址指向函数。

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

最佳答案

您几乎是在正确的轨道上。我建议您查看堆栈,看看返回地址是否在您认为的位置。里面可能还有别的东西。还要仔细检查字节顺序,

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

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

你的程序的输出是什么,通常如果你接近但没有完全正确,程序就会崩溃:)

关于c++ - 粉碎堆栈,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19106298/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com