Мне интересно, если p ie что-нибудь делает, если aslr выключен в системе? Или p ie зависит от aslr? - PullRequest
0 голосов
/ 06 апреля 2020

Мне также интересно, что делает p ie и что aslr влияет на память, насколько я понимаю, aslr рандомизирует адреса lib c base, stack и heap. И p ie рандомизирует базу эльфов и с этими .text, .data, .bss, .rodata ...

Это правильно или я ошибаюсь?

1 Ответ

2 голосов
/ 06 апреля 2020

P IE требует независимого от позиции кода, что требует небольшого количества производительности. (Или большое количество, например, 15% на ISA, таких как 32-битные x86, которые не поддерживают P C -относительную адресацию). См. 32-разрядные абсолютные адреса, более не разрешенные в x86-64 Linux? .

С отключенным ASLR, например, при работе в GDB или с отключенным в масштабе всей системы, Linux выбирает базовый адрес 0x0000555555555000 для сопоставления исполняемого файла, поэтому адреса objdump -d относительно начала файла, например, 0x4000, заканчиваются на этом высоком виртуальном адресе.

AP IE исполняемый файл является общим ELF объект (например, .so), в отличие от "исполняемого файла" ELF. Исполняемый файл ELF имеет базовый адрес в заголовках ELF, устанавливаемый компоновщиком, поэтому абсолютные адреса могут быть жестко закодированы в машинный код и данные без необходимости перемещения для исправлений. (Вот почему у ASLR нет способа создать правильный исполняемый файл ELF, только P IE.).

Механизм, поддерживающий P IE, изначально был просто забавным занятием, заключающимся в помещении точки входа в библиотеку. Позже люди поняли, что для ASLR было бы полезно обеспечить возможность кода / данных stati c в исполняемых файлах, поэтому существующая поддержка стала официальной. (Или что-то в этом роде; я не читал историю.)

Но в любом случае ASLR включен с помощью P IE, а P IE - вещь даже с отключенным ASLR, , если вы хотите самое общее нетехническое описание.

...