Dans un environnement Linux normal, même un programme qui simplement «malloc» et affiche son adresse affichera une adresse différente à chaque fois qu'il est exécuté.
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
char* p = malloc(1024);
printf("p = %p\n", p);
return 0;
}
Résultat de l'exécution:
$ a.out
p = 0xdd8fa82010
$ a.out
p = 0xe683097010
$ a.out
p = 0xb79170f010
Il s'agit d'une fonctionnalité du noyau appelée randomisation de la disposition de l'espace d'adressage qui randomise intentionnellement les adresses pour des raisons de sécurité.
Cependant, il arrive que vous souhaitiez corriger l'adresse, par exemple lors du débogage. Dans ce cas
$ echo 0 > /proc/sys/kernel/randomize_va_space
Et c'est suffisant. Les valeurs autres que 0 sont acceptées comme suit:
0 – No randomization. Everything is static.
1 – Conservative randomization. Shared libraries, stack, mmap(), VDSO and heap are randomized.
2 – Full randomization. In addition to elements listed in the previous point, memory managed through brk() is also randomized.
référence:
kernel - How can I temporarily disable ASLR (Address space layout randomization)? - Ask Ubuntu
Recommended Posts