Що таке /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 .

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.