stavo giocando intorno con un certo codice quando ho notato qualcosa di strano:Puntatore allo stack pseudo-casuale sotto 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%
La cosa strana per me è la variazione di indirizzo della variabile i.
La mia ipotesi è che il kernel fornisca diversi indirizzi iniziali di stack per cercare di contrastare una sorta di crack. Qual è la vera ragione?
Se si desidera testare con ASLR disabilitato, è possibile farlo con 'echo 0>/proc/sys/kernel/randomize_va_space' (come root, ovviamente). – caf
@caf: Grazie per il suggerimento. http://en.wikipedia.org/wiki/Address_space_layout_randomization –