Mengapa hampir semua pustaka bersama /usr/lib/
memiliki set bit izin yang dapat dieksekusi? Saya tidak melihat ada kasus penggunaan untuk mengeksekusi mereka. Beberapa memang berhasil menghubungkan beberapa bentuk main
fungsi untuk mencetak catatan hak cipta dan versi singkat, tetapi banyak yang tidak melakukan hal itu dan melakukan segmentasi saat eksekusi.
Jadi, apa gunanya mengatur ini x
? Haruskah semua pembuat paket perpustakaan melakukan itu? Apa yang akan terjadi jika saya dlopen()
perpustakaan bersama yang memiliki 0644
izin?
libraries
conventions
Tadeusz A. Kadłubowski
sumber
sumber
/lib
dan/usr/lib
libc dan libpthread, dan keduanya mencetak pemberitahuan hak cipta saat dijalankan.main()
simbol sebagai titik masuk bukan bug kecil, tetapi pilihan desain mendasar. Anda melewatkan poin saya.Jawaban:
Di bawah HP-UX, pustaka bersama dipetakan ke dalam memori menggunakan mmap (), dan semua halaman memori dalam sistem memiliki bit perlindungan yang digabungkan dengan mekanisme perlindungan halaman memori perangkat keras kernel dan prosesor. Untuk menjalankan konten halaman memori apa pun pada sistem, halaman itu harus memiliki set PROT_EXEC - fitur yang berguna untuk mencegah eksploitasi eksekusi data.
Panggilan mmap () menggunakan bit izin pada file yang akan dipetakan untuk menentukan bit perlindungan dari halaman memori yang dipetakan yang berisi itu: rwx -> PROT_READ | PROT_WRITE | PROT_EXEC (dari sys / mman.h). jadi agar pustaka bersama agar dapat digunakan pada HP-UX, file yang berisi pustaka bersama harus memiliki izin eksekusi untuk memastikan bahwa pustaka yang dipetakan juga memiliki izin eksekusi.
Pustaka bersama dengan mode 644 pada sistem HP-UX akan menyebabkan dump inti.
sumber
Objek bersama yang tidak dapat dieksekusi berfungsi dengan baik, tetapi pustaka yang ditandai dapat dieksekusi juga dapat dijalankan sebagai program mandiri.
Tidak ada, kecuali Anda ingin mereka mengeluarkan versi atau info lainnya
Tidak
Anda akan mendapatkan pegangan objek bersama yang baru (selama file dapat dibaca dll.) ... bit exec tidak memengaruhi ini
Seperti mengapa perpustakaan yang tidak dapat digunakan sebagai executable mandiri masih memiliki set bit exec: ini mungkin hanya sebuah artefak dari sistem build atau skrip tautan yang digunakan.
contoh output, hanya untuk referensi:
sumber
main()
titik masuk normal . Libc adalah outlier. Pengembangnya melakukan catatan ini sebagai fungsi tambahan. Sederhanachmod a+x
dari perpustakaan lain mana pun tidak akan memberi Anda fungsi ini` Saya masih tidak melihat titik pengaturan+x
untuk semua perpustakaan..so
yang bisa dieksekusi yang harus ditandai seperti itu. Saya akan mengubah jawaban saya untuk menghindari menyiratkan bahwa segala sesuatu dengan set bit exec benar-benar executable mandiri.