Я надеюсь, что вы не спрашиваете о главных записях, которые заявляют, что для запрошенной библиотеки libm.so.6
было найдено, например, в файле /lib/libm.so.6
, но спрашивают о двух выбросах.
Почему они отображаются иначе? для linux-gate.so.1
это потому, что на самом деле это не файл на диске - он отображается ядром как механизм для создания системных вызовов. Для /lib/ld-linux.so.2
это потому, что это программа , которая используется для фактического запуска приложения.
Существует довольно хороший blog entry, описывающий 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 0x0000000000000238 0x0000000000400238 0x0000000000400238
0x000000000000001c 0x000000000000001c R 1
[Requesting program interpreter: /lib64/ld-linux-x86-64.so.2]
«время выполнения переводчика»? Можете ли вы рассказать об этом, пожалуйста? –
извинения, технический термин - * program * interpreter - я добавил абзац, подробно описывающий большую часть работы, которую он делает – Petesh
Большое спасибо, thats очищает именно ту путаницу, к которой я стремился :). Невероятно, что вы также объясните, как может возникнуть путаница, глядя на секции ELF, я этого не знал. –