首先,这是一个家庭作业问题。我不确定这是否可以,但不要发布任何有关如何更改 int 值的内容。
我的问题是我是否有顺序
int set_me = 0;
char buf[15];
切换到
char buf[15];
int set_me = 0;
它仍然会通过溢出字符数组来更改整数。我使用 gcc -m32 -o buffer -O0 -fno-stack-protector buffer.c 来编译该文件。我猜 -O0
让 gcc 不优化堆栈,因此 int an char[] 应该按 C 代码中的顺序排列。原始代码在 if 条件下做了一些事情,但没有显示在那里。
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
int main(int argc, char** argv)
{
if(argc != 2)
{
printf("usage:\n%s string\n", argv[0]);
return EXIT_FAILURE;
}
int set_me = 0;
char buf[15];
if(set_me == 1111222){}
return EXIT_SUCCESS;
}
最佳答案
堆栈上变量的顺序取决于实现。
仅仅因为变量在代码中按特定顺序定义,并不意味着它们在编译后的程序中将按相同的顺序排列。添加更多不同类型的变量可能会也可能不会改变顺序,就像更改优化设置一样。
如果您正在测试缓冲区溢出,则需要尝试使用变量声明,直到获得所需的布局。
关于c - 缓冲区溢出问题中的初始化顺序问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53122780/