Nehmen Sie dieses C-Code zum BeispielWie virtuelle Adressen zugewiesen?
#include <stdio.h>
#include <stdlib.h>
int main() {
int x;
int* y = (int *) malloc(10*sizeof(int));
printf("%p\n",&x);
printf("%p\n",y);
printf("%p\n",&(y[1]));
while(1);
return 0;
}
Welche virtuelle Adressen gedruckt werden, die so etwas wie dieses
0x7ffd4e96d214
0x908010
0x908014
Die virtuellen Adressen anders aussehen wird jedes Mal, wenn Sie die Binärdatei ausführen, die mich denken ließ, wie die virtuelle Adresse a Re hat sich eigentlich für ein Programm entschieden?
[Werfen Sie nicht das Ergebnis von 'malloc' in C] (http://stackoverflow.com/q/605845/995714) –
Sieht aus wie Windows-Nummern. & x ist eine Adresse auf dem Stapel, y ist eine Adresse auf dem Heap. Die Positionen des Stacks eines Threads und der Heap in einem x64-Prozess werden von/DYNAMICBASE und/HIGHENTROPYVA randomisiert, wodurch Ihr Programm schwer zu attackieren ist. –
Danke für den Tipp @ LưuVĩnhPhúc –