Linux: corriger l'adresse renvoyée par malloc

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

Linux: corriger l'adresse renvoyée par malloc
Linux: renommez le processus affiché par la commande ps
Linux: comprendre les informations affichées par la commande top
Linux: guide de configuration Netplan pour savoir quand vous souhaitez corriger l'adresse IP
Contrôler les trackpads Linux
À propos du numéro (numéro de section) entre () affiché par la commande man Linux