在Linux下的伪随机堆栈指针?

当我注意到一些奇怪的东西时,我正在玩一些代码:

[~] main% cat test.cc #include <stdio.h> void f() { int i; fprintf(stderr, "&i = 0x%08X\n", (long)&i); } int main(int argc, char**argv) { f(); } [~] main% g++ test.cc [~] main% ./a.out &i = 0xBFA27AB4 [~] main% ./a.out &i = 0xBFAD7E24 [~] main% ./a.out &i = 0xBFCA3464 [~] main% ./a.out &i = 0xBF96C064 [~] main% 

对我来说奇怪的是variablesi的地址的变化。

我的猜测是,内核提供了不同的堆栈起始地址来试图阻止某种破解。 真正的原因是什么?

Solutions Collecting From Web of "在Linux下的伪随机堆栈指针?"