2016-04-10 4 views
4

Возьмите этот код С, напримеркак назначаются виртуальные адреса?

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

Что будет печатать виртуальные адреса, которые выглядят что-то как этот

0x7ffd4e96d214

0x908010

0x908014

виртуальные адреса будут отличаться каждый раз, когда вы запускаете двоичный файл, который заставлял меня думать, как виртуальный адрес Реально ли выбрали программу?

+1

[Не набрасывать результат 'malloc' в C] (http://stackoverflow.com/q/605845/995714) –

+0

Похоже на номера Windows. & x - адрес в стеке, y - адрес в куче. Расположение стека потока и кучи в процессе x64 рандомизируются с помощью/DYNAMICBASE и/HIGHENTROPYVA, что затрудняет атаку вашей программы. –

+0

Спасибо за подсказку @ LưuVĩnhPhúc –

ответ

4

Это - возможно - эффект ASLR.

Решение должно - как указано в ракурсе «Адресное пространство», - быть случайным.

+0

Ницца - я чему-то научился – nhouser9

Смежные вопросы