процесс запуска исполняемого файла Linux - PullRequest
3 голосов
/ 13 августа 2011

Есть ли хорошая документация о том, что происходит, когда я запускаю какой-нибудь исполняемый файл в Linux. Например: я запускаю ./a.out, поэтому, вероятно, запускается какая-то сборка загрузчика (поставляется с c runtime?), И он находит начальный символ в программе, которая выполняет динамическое перемещение, наконец, вызовите main.

Я знаю, что вышеупомянутое не правильно, но ищу подробную документацию о том, как этот процесс происходит. Можете ли вы объяснить или указать ссылки или книги, которые делают?

Ответы [ 2 ]

5 голосов
/ 13 августа 2011

Для программ с динамической связью ядро ​​обнаруживает заголовок PT_INTERP в файле ELF и сначала отображает динамический компоновщик (/lib/ld-linux.so.2 или аналогичный) и начинает выполнение по адресу e_entry из основного заголовка ELF динамический компоновщик. Начальное состояние стека содержит информацию, необходимую динамическому компоновщику для поиска двоичного файла основной программы (уже в памяти). Он отвечает за чтение и поиск всех дополнительных библиотек, которые должны быть загружены, загрузку их, выполнение перемещений и переход на адрес e_entry основной программы.

Для статически связанных программ ядро ​​напрямую использует адрес e_entry из заголовка ELF основной программы.

В любом случае основная программа начинается с подпрограммы, написанной на ассемблере, которая обычно называется _start (но имя не важно, если ее адрес находится в поле e_entry заголовка ELF). Он использует начальное содержимое стека для определения argc, argv, environ и т. Д. И вызывает правильные внутренние функции реализации (обычно написанные на C) для запуска глобальных конструкторов (если таковые имеются) и выполнения любой необходимой инициализации libc. до входа в main. Обычно это заканчивается звонком на exit(main(argc, argv)); или эквивалентным.

1 голос
/ 13 августа 2011

Книга " Linker and Loader " дает подробное описание процесса загрузки. Может быть, это поможет вам решить проблему.

...