2016-04-10 15 views
4

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?

+1

[Werfen Sie nicht das Ergebnis von 'malloc' in C] (http://stackoverflow.com/q/605845/995714) –

+0

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. –

+0

Danke für den Tipp @ LưuVĩnhPhúc –

Antwort

4

Dies ist - wahrscheinlich - der Effekt von ASLR.

Die Entscheidung sollte - wie der Name Address Space Layout Randomisierung sagt - zufällig sein.

+0

Schön - ich habe etwas gelernt – nhouser9