Linux: Korrigieren Sie die von malloc zurückgegebene Adresse

In einer normalen Linux-Umgebung zeigt sogar ein Programm, das einfach "malloc" ist und seine Adresse anzeigt, bei jeder Ausführung eine andere Adresse an.

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
    char* p = malloc(1024);
    printf("p = %p\n", p); 
    return 0;
}

Ausführungsergebnis:

$ a.out
p = 0xdd8fa82010
$ a.out
p = 0xe683097010
$ a.out
p = 0xb79170f010

Dies ist eine Funktion des Kernels namens Adressraum-Layout-Randomisierung, die Adressen aus Sicherheitsgründen absichtlich randomisiert.

Es gibt jedoch Situationen, in denen Sie die Adresse korrigieren möchten, z. B. beim Debuggen. In einem solchen Fall

$ echo 0 > /proc/sys/kernel/randomize_va_space

Und es ist ausreichend. Andere Werte als 0 werden wie folgt akzeptiert:

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.

Referenz:

kernel - How can I temporarily disable ASLR (Address space layout randomization)? - Ask Ubuntu

Recommended Posts

Linux: Korrigieren Sie die von malloc zurückgegebene Adresse
Linux: Benennen Sie den vom Befehl ps angezeigten Prozess um
Linux: Verstehen Sie die Informationen, die vom Befehl top angezeigt werden
Linux: Netplan-Konfigurationshandbuch, um zu sehen, wann Sie die IP-Adresse korrigieren möchten
Steuern Sie Linux-Trackpads
Informationen zu der Nummer (Abschnittsnummer) in (), die vom Linux-Befehl man angezeigt wird