Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 堆栈变量的排序_C_Gcc_Gdb_Malware - Fatal编程技术网

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上,不保证堆栈变量的顺序。如果您想强制执行特定的排序,请将它们放入一个结构中。

不要使堆栈缓冲区溢出-这样您的要求就会消失。也许编译器会试图使有意的缓冲区溢出更加困难?:-)