6
我玩弄一些代碼時,我發現了一些奇怪: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%
奇怪的事情對我來說是變量i的地址的變化。
我的猜測是內核提供了不同的堆棧起始地址來試圖阻止某種破解。真正的原因是什麼?
如果你想測試禁用ASLR,你可以用'echo 0>/proc/sys/kernel/randomize_va_space'來做到這一點(當然是root)。 – caf 2009-12-17 13:42:10
@caf:謝謝你的提示。 http://en.wikipedia.org/wiki/Address_space_layout_randomization – 2009-12-17 15:20:19