gpt4 book ai didi

c - 使用缓冲区溢出覆盖位于缓冲区下方的局部变量

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

我正在对堆栈溢出进行一些基础研究,但在如何覆盖/修改位于内存缓冲区下方的局部变量方面遇到了一些麻烦。

考虑以下一段伪 C 代码

char buff[20];
int pass=0;
.
.
.
gets(buff)
check if buff equals something, if true set pass == 1
if pass == 1, grant access

现在,据我所知,声明的变量在堆栈中的顺序相反。即buff在栈中位于pass之上。当 gets 将某些内容复制到 buff 中时,缓冲区会向高地址空间增长 - 向返回地址并远离传递变量。我键入什么输入并不重要 - 我根本无法覆盖 pass,因为它位于缓冲区的“错误”一侧?

最佳答案

您无法保证变量在堆栈中的位置。编译器可能会重新排列它们。 pass 恰好位于 buff[19] 之后也没有关系。尝试访问 buff[20] 仍然是未定义的行为。未定义的行为是未定义的,所以任何事情都可能发生。

但是,如果您声明一个struct,它就会有点不同。让我们来看这个简单的例子:

struct foobar {
int foo;
char bar;
struct foobar * next;
}

这里您可以保证 foobarnext 将按照您指定的顺序排列。

关于c - 使用缓冲区溢出覆盖位于缓冲区下方的局部变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48064430/

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