Позиционно-независимый исполняемый файл: что такое «основной исполняемый файл»?

Читая https://en.wikipedia.org/wiki/Address_space_layout_randomization , я встретил термин:

Независимый от позиции исполняемый файл (PIE) реализует случайный базовый адрес для основного исполняемого двоичного файла и существует с 2003 года. Он обеспечивает такую ​​же случайность адреса для основного исполняемого файла, которая используется для общих библиотек.

Что означает основной исполняемый двоичный файл здесь? Это просто файл tu / source, содержащий основную функцию?

Всего 2 ответа


Это означает вывод компоновщика при сборке исполняемого файла, так называемого файла a.out в мире * nix. Компилятор создает объектные файлы, а компоновщик разрешает все зависимости в файл a.out . Некоторые из этих зависимостей будут внешними (библиотеки динамических ссылок).

Основным исполняемым файлом будет файл, который ОС (возможно, компоновщик) загружает изначально, когда вы его выполняете. Последующие загрузки будут динамическими библиотеками, которые являются внешними зависимостями, созданными в процессе сборки.


Я предполагаю, что это двоичный файл с функцией main() , поэтому программа в строгом смысле.

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


Есть идеи?

10000