Tôi đang chơi xung quanh với một số mã khi tôi nhận thấy một cái gì đó kỳ lạ:Con trỏ ngăn xếp giả ngẫu nhiên dưới 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ều kỳ lạ đối với tôi là sự thay đổi trong địa chỉ của biến i.
Tôi đoán là hạt nhân cung cấp các địa chỉ bắt đầu ngăn xếp khác nhau để cố gắng ngăn chặn một số loại vết nứt. Lý do thực sự là gì?
Nếu bạn muốn thử nghiệm với ASLR bị vô hiệu hóa, bạn có thể làm điều đó với 'echo 0>/proc/sys/kernel/randomize_va_space' (như là thư mục gốc, tất nhiên). – caf
@caf: Cảm ơn gợi ý. http://en.wikipedia.org/wiki/Address_space_layout_randomization –