Apa itu /lib64/ld-linux-x86-64.so.2 dan mengapa bisa digunakan untuk mengeksekusi file?

17

Baru-baru ini, saya telah belajar trik bahwa jika file tidak memiliki izin yang dapat dieksekusi, kita dapat menjalankan file itu dengan menggunakan /lib64/ld-linux-x86-64.so.2.

Misalnya, untuk mengembalikan x izin untuk

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

kita bisa lari

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

Aku benar-benar tidak tahu bagaimana itu bisa dilakukan, itu bukan hal biasa, semacam misteri.

Federal Reserve
sumber

Jawaban:

18

Itulah tautan dinamis; jika Anda menjalankannya sendiri, itu akan memberi tahu Anda apa yang dilakukannya:

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

Anda telah memanggil 'ld.so', program pembantu untuk executable perpustakaan bersama. Program ini biasanya hidup dalam file /lib/ld.so, dan arahan khusus dalam file yang dapat dieksekusi menggunakan pustaka bersama ELF memberi tahu pemuat program sistem untuk memuat program penolong dari file ini. Program bantuan ini memuat pustaka bersama yang diperlukan oleh program yang dapat dieksekusi, menyiapkan program untuk dijalankan, dan menjalankannya. Anda dapat menjalankan program bantuan ini langsung dari baris perintah untuk memuat dan menjalankan file yang dapat dieksekusi ELF; ini seperti mengeksekusi file itu sendiri, tetapi selalu menggunakan program helper ini dari file yang Anda tentukan, bukan file program helper yang ditentukan dalam file executable yang Anda jalankan. Ini sebagian besar berguna bagi pengelola untuk menguji versi baru dari program bantuan ini; kemungkinan Anda tidak berniat untuk menjalankan program ini.

Linker digunakan untuk menjalankan program yang terhubung secara dinamis. Ketika Anda menjalankan chmod, kernel berjalan secara efektif /lib64/ld-linux-x86-64.so.2 chmod, seperti yang Anda lakukan secara manual; yang terakhir bekerja bahkan jika chmodbiner tidak dapat dieksekusi.

Anda akan menemukan lebih banyak detail tentang ini dalam program Bagaimana yang terbaik dijalankan: artikel binari ELF .

Stephen Kitt
sumber