Bisakah kode modifikasi diri digunakan untuk mempercepat pemanggilan fungsi di pustaka yang terhubung secara dinamis?
Sejauh yang saya pahami, pustaka bersama ELF menggunakan semacam tabel lompat tidak langsung (tabel tautan prosedur, atau PLT) untuk mengaktifkan fungsi perpustakaan yang mengikat secara malas. Tujuannya tampaknya untuk menghindari keharusan memodifikasi tabel di segmen kode sambil tetap mengaktifkan resolusi malas posisi fungsi pada panggilan pertama.
Bukankah lebih cepat untuk secara dinamis membuat kode untuk tabel itu pada waktu buka, atau mungkin bahkan pada panggilan fungsi pertama?
Apakah ini untuk memungkinkan pembagian segmen kode antara proses sebanyak mungkin (tabel dinamis akan bersifat pribadi untuk suatu proses)? Apakah ini untuk alasan keamanan (kode yang dapat ditulis seharusnya tidak dapat dieksekusi - tetapi JIT selalu melakukannya, dan izin menulis dapat ditambahkan dan dihapus oleh loader sebelum benar-benar memulai program)?
Atau itu kombinasi dari semuanya, dan perolehan kinerja kecil per panggilan fungsi tidak akan sepadan dengan usaha?
ELF DSO dapat menggunakan bendera (DF_TEXREL) untuk mengumumkan bahwa mereka memerlukan pemindahan lokasi dengan memodifikasi bagian teks mereka (yang biasanya hanya baca). Pendekatan tabel lompat bersama dengan kode independen posisi PIE harus lebih optimal.
(Ditemukan di http://www.akkadia.org/drepper/dsohowto.pdf , tetapi sumber daya lain menyebutkan ini juga).
sumber