2016-04-10 6 views
4

Prenez ce code C par exemplecomment les adresses virtuelles ont-elles été attribuées?

#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; 
} 

Ce qui permet d'imprimer des adresses virtuelles qui ressemblent à ce

0x7ffd4e96d214

0x908010

0x908014

Les adresses virtuelles seront différentes chaque fois que vous exécutez le fichier binaire qui m'a fait penser à la façon dont l'adresse virtuelle un est-ce que vous avez décidé d'un programme?

+1

[Ne pas convertir le résultat de 'malloc' en C] (http://stackoverflow.com/q/605845/995714) –

+0

Ressemble aux numéros Windows. & x est une adresse sur la pile, y est une adresse sur le tas. Les emplacements de la pile d'un thread et du tas dans un processus x64 sont randomisés par/DYNAMICBASE et/HIGHENTROPYVA, ce qui rend votre programme difficile à attaquer. –

+0

Merci pour le conseil @ LưuVĩnhPhúc –

Répondre

4

Ceci est - probablement - l'effet de ASLR. La décision devrait - comme le nom l'indique Randomization Disposition d'espace d'adresse - être aléatoire.

+0

Nice - J'ai appris quelque chose – nhouser9