Рассмотрим этот код, работающий в современной системе Ubuntu 16.04 x86_64:
void main(int argc, char *argv[])
{
while(1) {
char *x = (char *)mmap(0, 1000, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
printf("%p\n", x);
munmap(x, 1000);
}
}
Чей вывод выглядит так:
0x7f02ca14c000
0x7f02ca14c000
0x7f02ca14c000
0x7f02ca14c000
...
Я бы ожидал, предоставив адресную подсказку с нулевым значением, а ASLR глобально включен для получения здесь случайных адресов.
Можно ли mmap() анонимно использовать общую память по случайным адресам?