Я играл с каким-то кодом, когда заметил что-то странное:
[~] 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.
Я предполагаю, что ядро предоставляет разные начальные адреса стека, чтобы попытаться воспрепятствовать некоторому взлому. В чем реальная причина?