Как ASLR рандомизирует адресное пространство в Linux - PullRequest
0 голосов
/ 28 февраля 2020

Я пытаюсь выяснить, как работает ASLR в Linux, я написал простую программу c, как показано ниже:

void simple(void)
{
    printf("simple func\n");
}
int main(void)
{
    simple();

    printf("address is %p \n.", (void*)&simple);

    return 0;
}

в приведенном выше коде, я просто печатаю адрес местоположения простой функции, и во всем выполнении приведенного выше кода я получаю один и тот же адрес для простой функции, но из-за ASLR, я ожидаю получить случайный адрес для простой функции при каждом выполнении программы? я не прав и ASLR не должен этого делать? конечно, когда я запускаю «ldd app.o», я каждый раз получаю случайный адрес для разных библиотек.

1 Ответ

2 голосов
/ 28 февраля 2020

Fedora / CentOS / Redhat и, вероятно, другие дистрибутивы по умолчанию настроены на сборку с -no-pie (Position Independent Executables), что предотвращает ASLR самого исполняемого файла.

Вы можете явно включить его с помощью -pie:

gcc -pie app.c -o app && ./app
...