[~] 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%
对我来说奇怪的是变量i的地址变化。
我的猜测是内核提供不同的堆栈起始地址以试图阻止某种破解。真正的原因是什么?
答案 0 :(得分:8)
Address space layout randomisation用于多个操作系统。堆栈指针地址的变化可能是由此引起的 - 很可能是最近版本的Linux和/或* BSD的情况。 IIRC最新版本的Windows也可以这样做。