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?
[Ne pas convertir le résultat de 'malloc' en C] (http://stackoverflow.com/q/605845/995714) –
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. –
Merci pour le conseil @ LưuVĩnhPhúc –