Co to jest /lib64/ld-linux-x86-64.so.2 i dlaczego można go użyć do wykonania pliku?

17

Ostatnio nauczyłem się sztuczki, że jeśli plik nie ma uprawnień do wykonywania, możemy go uruchomić za pomocą /lib64/ld-linux-x86-64.so.2.

Na przykład, aby przywrócić uprawnienia x dla

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

możemy biegać

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

Naprawdę nie wiem, jak to zrobić, to nie jest zwykła sprawa, rodzaj tajemnicy.

Rezerwa Federalna
źródło

Odpowiedzi:

18

To jest dynamiczny linker; jeśli uruchomisz go samodzielnie, powie ci, co robi:

Stosowanie: ld.so [OPTION]... EXECUTABLE-FILE [ARGS-FOR-PROGRAM...]

Wywołałeś „ld.so”, program pomocniczy do plików wykonywalnych biblioteki współdzielonej. Ten program zwykle znajduje się w pliku /lib/ld.so, a specjalne dyrektywy w plikach wykonywalnych korzystających z bibliotek współdzielonych ELF nakazują systemowemu programowi ładującemu załadowanie programu pomocniczego z tego pliku. Ten program pomocniczy ładuje biblioteki współdzielone wymagane przez plik wykonywalny programu, przygotowuje program do uruchomienia i uruchamia go. Możesz wywołać ten program pomocniczy bezpośrednio z wiersza poleceń, aby załadować i uruchomić plik wykonywalny ELF; to jest jak wykonywanie samego pliku, ale zawsze używa tego programu pomocniczego z określonego pliku, zamiast pliku programu pomocniczego określonego w uruchamianym pliku wykonywalnym. Jest to głównie przydatne dla opiekunów do testowania nowych wersji tego programu pomocniczego; istnieje prawdopodobieństwo, że nie zamierzałeś uruchamiać tego programu.

Linker służy do uruchamiania programów połączonych dynamicznie. Po uruchomieniu chmodjądro działa skutecznie /lib64/ld-linux-x86-64.so.2 chmod, podobnie jak ręcznie; ten ostatni działa, nawet jeśli chmodplik binarny nie jest wykonywalny.

Więcej szczegółów na ten temat znajdziesz we wspaniałym artykule Jak uruchomić programy: pliki binarne ELF .

Stephen Kitt
źródło