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