Ответ 1
Я надеюсь, что вы не спрашиваете о главных записях, которые заявляют, что для запрошенной библиотеки libm.so.6
она была найдена в файле /lib/libm.so.6
, например, но спрашивает о двух выбросах.
Почему они отображаются по-разному? для linux-gate.so.1
, потому что это не файл на диске - он отображается ядром как механизм для выполнения системных вызовов. Для /lib/ld-linux.so.2
это потому, что это программный интерпретатор, который используется для фактического запуска приложения.
Там довольно хорошая запись описывающая linux -gate.so, и это объясняет это довольно хорошо.
Для /lib/ld-linux.so.2
вам нужно немного понять, что происходит при запуске двоичного файла ELF. Короткий ответ заключается в том, что обработчик ядра для этих типов двоичных файлов использует этот файл для запуска приложения.
Основной целью этой программы является отображение двоичного кода в память, загрузка любых библиотек, на которые имеются ссылки в программе (например, ранее упомянутый libm.so.6), а затем передать управление начальному адресу исполняемого двоичного файла.
Эта программа определяется как часть структуры файла ELF в разделе INTERP
заголовка программы. Для 32-битных бинарных файлов Linux это типичное имя 32-битного интерпретатора. Для 64-битных двоичных файлов вы найдете, что он обычно называется ld-linux-x86_64.so.2
(для 64-разрядных платформ x86).
Вы можете сами определить эту информацию, используя readelf -l
, и раздел INTERP:
INTERP 0x0000000000000238 0x0000000000400238 0x0000000000400238
0x000000000000001c 0x000000000000001c R 1
[Requesting program interpreter: /lib64/ld-linux-x86-64.so.2]