我在同一台机器上多次运行此程序。
#include <stdio.h>
int a = 0;
int main() {
int b = 0;
printf("%p %p\n", &a, &b);
}
a
的相同地址,但对于b
,它会更改。我知道a
会进入.data
部分,所以地址是固定的(如果我错了,请纠正我)但为什么堆栈每次都会得到不同的地址?答案 0 :(得分:2)
要使全局变量的地址发生变化,请使用-fpie
编译可执行文件,并链接到-fpie -pie
。
有关详细信息,请参阅Position Independent Executables (PIE)。