Что такое ld-linux.Итак.2 и linux-gate.Итак.1?
когда я запускаю ldd program
Я получаю вывод формы
linux-gate.so.1 => (0xb77ae000)
libstdc++.so.6 => /lib/libstdc++.so.6 (0xb76bc000)
libm.so.6 => /lib/libm.so.6 (0xb7691000)
libgcc_s.so.1 => /lib/libgcc_s.so.1 (0xb7674000)
libc.so.6 => /lib/libc.so.6 (0xb74c2000)
/lib/ld-linux.so.2 (0xb77af000)
можете ли вы объяснить выход и причину linux-gate.so.1
и ld-linux.so.2
показать иначе, чем другие записи? Какова их роль?
1 ответов
Я надеюсь, что вы не спрашиваете об основных записях, в которых говорится, что для запрашиваемой библиотеки libm.so.6
Он был найден в файле /lib/libm.so.6
, например, но спрашивают о двух выбросах.
почему они отображаются по-разному? для linux-gate.so.1
это потому, что на самом деле это не файл на диске - это предоставляемые ядра как механизм системных вызовов. Для /lib/ld-linux.so.2
потому что это программа переводчик, который используется на самом деле запуск приложения.
есть запись в блог описание linux-gate.и это все объясняет.
на /lib/ld-linux.so.2
, вы должны немного понять, что происходит, когда вы запускаете двоичный файл ELF. Короткий ответ заключается в том, что обработчик ядра для этих типов двоичных файлов использует этот файл для запуска приложения.
основная цель этой программы-отобразить двоичный файл в память, загрузить любой ссылочные библиотеки в программе (например, libm.Итак.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]