我的印象是你声明变量的顺序决定了在调用函数时它们被放在堆栈上的顺序,会有一个反比关系(与声明它们的方式相反的顺序将用于放置他们在堆栈上。)
例如,我有两个变量:
char buffer[16];
int flag = 0;
我想确保标志总是放在缓冲区之前,但不管我在C中声明它们的顺序,gdb显示缓冲区总是放在堆栈上的标志之前,这对于基于堆栈非常糟糕缓冲区溢出。这是为什么?
系统即将在使用gcc 5.2的x86_64上运行的Arch Linux 64bit中使用
答案 0 :(得分:2)
没有保证堆栈变量的排序。如果要强制执行特定排序,请将它们放在结构中。