Что такое /lib64/ld-linux-x86-64.so.2 и почему его можно использовать для выполнения файла?

17

Недавно я узнал одну хитрость: если у файла нет прав на выполнение, мы можем запустить этот файл с помощью /lib64/ld-linux-x86-64.so.2.

Например, чтобы восстановить разрешение x для

-rw-r--r-- 1 root root 59K Mar  1  2017 /bin/chmod

мы можем бежать

/lib64/ld-linux-x86-64.so.2 /bin/chmod +x /bin/chmod

Я действительно не знаю, как это можно сделать, это не обычные вещи, вроде загадки.

Федеральный резерв
источник

Ответы:

18

Это динамический компоновщик; если вы запустите его самостоятельно, он скажет вам, что он делает:

Использование: ld.so [OPTION]... EXECUTABLE-FILE [ARGS-FOR-PROGRAM...]

Вы вызвали ld.so, вспомогательную программу для исполняемых файлов совместно используемой библиотеки. Эта программа обычно находится в файле /lib/ld.so, а специальные директивы в исполняемых файлах, использующие совместно используемые библиотеки ELF, сообщают системному загрузчику, чтобы он загружал вспомогательную программу из этого файла. Эта вспомогательная программа загружает разделяемые библиотеки, необходимые для исполняемого файла программы, подготавливает программу к запуску и запускает ее. Вы можете вызвать эту вспомогательную программу прямо из командной строки, чтобы загрузить и запустить исполняемый файл ELF; это похоже на выполнение самого файла, но всегда использует эту вспомогательную программу из указанного вами файла, а не вспомогательный файл программы, указанный в исполняемом файле, который вы запускаете. Это в основном используется сопровождающими для тестирования новых версий этой вспомогательной программы; скорее всего, вы не собирались запускать эту программу.

Компоновщик используется для запуска динамически связанных программ. Когда вы запускаете chmod, ядро ​​эффективно работает /lib64/ld-linux-x86-64.so.2 chmod, как вы делали вручную; последний работает, даже если chmodдвоичный файл не является исполняемым.

Вы найдете гораздо больше подробностей об этом в отличной статье Как запускаются программы: статья ELF binaries .

Стивен Китт
источник