C 堆栈变量的排序
我的印象是,您声明变量的顺序将决定它们在堆栈上的顺序。当调用函数时,会有一种相反的关系(声明顺序的相反顺序将用于将它们放在堆栈上) 例如,我有两个变量:C 堆栈变量的排序,c,gcc,gdb,malware,C,Gcc,Gdb,Malware,我的印象是,您声明变量的顺序将决定它们在堆栈上的顺序。当调用函数时,会有一种相反的关系(声明顺序的相反顺序将用于将它们放在堆栈上) 例如,我有两个变量: char buffer[16]; int flag = 0; 我想确保标志总是放在缓冲区之前,但不管我在C中声明它们的顺序是什么,gdb显示缓冲区总是放在堆栈上的标志之前,这对基于堆栈的缓冲区溢出非常不利。为什么会这样 我在Arch Linux 64位中使用的系统运行在x86_64和gcc 5.2上,不保证堆栈变量的顺序。如果您想强制执行特定
char buffer[16];
int flag = 0;
我想确保标志总是放在缓冲区之前,但不管我在C中声明它们的顺序是什么,gdb显示缓冲区总是放在堆栈上的标志之前,这对基于堆栈的缓冲区溢出非常不利。为什么会这样
我在Arch Linux 64位中使用的系统运行在x86_64和gcc 5.2上,不保证堆栈变量的顺序。如果您想强制执行特定的排序,请将它们放入一个结构中。不要使堆栈缓冲区溢出-这样您的要求就会消失。也许编译器会试图使有意的缓冲区溢出更加困难?:-)