Saya hanya penasaran.
bash-3.00$ ldd libmylibrary.so
ldd: warning: you do not have execution permission for `libmylibrary.so'
Semuanya tampaknya berfungsi dengan baik hanya dengan + r. Saya perhatikan bahwa sebagian besar .so di / usr / lib memiliki + x set ...
Mengapa shared libs seharusnya memiliki bit set yang dapat dieksekusi? Apa yang bisa terjadi jika saya tidak mengaturnya?
Jawaban:
Sebenarnya itu tergantung pada
ldd
implementasinya.ldd
biasanya skrip, Anda dapat mengeditnya untuk melihat di mana dan mengapa Anda mendapatkan kesalahan itu.Di Ubuntu 10,04,
ldd
periksa untukread
izin saja. Mungkin memberikan kesalahan bukan eksekusi dinamis jika file bukan ELF ( Format yang Dapat Dieksekusi dan Dapat Ditautkan ). Lib di sini semuanya-rw-r--r--
, misalnyaTidak mengejutkan untuk menginginkan
x
akses ke perpustakaan bersama. Theexecutable
Modus adalah konvensi yang memberikan OS tingkat lain kontrol hak akses. Loader yang dapat dieksekusi mengontrol akses itu, untuk memastikan pengguna dapat menjalankannya, tetapi juga untuk mencegah kesalahan (beberapa skrip atau program tidak boleh dijalankan oleh beberapa orang).Ini dapat diperluas ke pustaka bersama karena alasan yang sama - tetapi pustaka bersama tidak dapat berjalan sendiri, dan lebih sedikit kemungkinan kesalahan untuk digunakan secara tidak sengaja ). Dengan demikian kebutuhannya kurang jelas (
r
aksesnya mencukupi).sumber
Anda sebenarnya dapat menjalankan banyak perpustakaan, lihat misalnya apa yang terjadi ketika Anda mengetikkan
/lib/libc.so.6
shell pada sistem GNU / Linux baru-baru ini.sumber
berpikir seperti memiliki file yang dapat dieksekusi dengan -x. Anda tidak akan bisa menjalankannya. Pertimbangkan pustaka ini sebagai kumpulan fungsi umum, yang dipanggil oleh program lain (misalkan myProgra). Jika Anda tidak dapat menjalankan library / function ... maka Anda tidak punya apa-apa
Sebuah contoh
Sekarang jika Anda menempatkan function1 dan function2 di file lain dan Anda memasukkannya, maka Anda perpustakaan. (Tentu saja itu sesuatu yang lebih rumit. Ini hanya sebuah contoh)
Tetapi bagaimanapun juga, seperti yang Anda lihat, Anda harus mengeksekusi kode yang dimasukkan dalam perpustakaan
sumber
Kuncinya adalah format file, Executable dan Linkable Format. Karena format file yang sama persis digunakan untuk mengidentifikasi kedua executable dan shared library, keduanya harus memiliki izin yang dapat dieksekusi yang sesuai untuk loader OS. Ini memungkinkan loader tunggal dan untuk executable digunakan sebagai DSO jika mereka menyertakan tabel simbol.
sumber