Saya menemukan referensi untuk itu baru-baru ini di proggit dan (seperti yang sekarang) tidak dijelaskan.
Saya curiga ini mungkin, tapi saya tidak tahu pasti.
c
linux
environment-variables
Hank Gay
sumber
sumber
Jawaban:
Jika Anda menyetel
LD_PRELOAD
ke lintasan objek bersama, file itu akan dimuat sebelum perpustakaan lain (termasuk runtime C,libc.so
). Jadi untuk menjalankanls
denganmalloc()
implementasi khusus Anda , lakukan ini:sumber
LD_PRELOAD
. Alasannya adalah bahwa itu menjadi variabel lingkungan, itu diwarisi oleh proses anak - yang mungkin memiliki direktori kerja yang berbeda dari proses induk. Jadi setiap jalur relatif akan gagal menemukan perpustakaan untuk dimuat sebelumnya.Anda bisa mengganti simbol di pustaka stok dengan membuat pustaka dengan simbol yang sama dan menentukan pustaka di
LD_PRELOAD
.Beberapa orang menggunakannya untuk menentukan perpustakaan di lokasi yang tidak standar, tetapi
LD_LIBRARY_PATH
lebih baik untuk tujuan itu.sumber
Dengan
LD_PRELOAD
Anda dapat memberikan prioritas perpustakaan.Misalnya Anda dapat menulis perpustakaan yang menerapkan
malloc
danfree
. Dan dengan memuat ini denganLD_PRELOAD
Andamalloc
danfree
akan dieksekusi daripada yang standar.sumber
calloc
? bukankah itu mengacaukan segalanya?malloc
dan gratis dirancang khusus dalam glibc untuk memungkinkan ini dan stokcalloc
mengelola panggilan Anda yang diimpormalloc
. Jangan coba ini dengan fungsi lain. Itu tidak akan bekerja dengan baik.Seperti yang banyak orang sebutkan, gunakan
LD_PRELOAD
untuk preload library. BTW, Anda dapat PERIKSA jika pengaturan tersedia denganldd
perintah.Contoh: misalkan Anda harus melakukan preload sendiri
libselinux.so.1
.Jadi, atur lingkungan preload Anda:
Periksa perpustakaan Anda lagi:
sumber
LD_PRELOAD
daftar pustaka bersama dengan fungsi yang mengesampingkan set standar, sama seperti/etc/ld.so.preload
halnya. Ini diimplementasikan oleh loader/lib/ld-linux.so
. Jika Anda ingin menimpa hanya beberapa fungsi yang dipilih, Anda dapat melakukan ini dengan membuat file dan pengaturan objek overrideLD_PRELOAD
; fungsi-fungsi dalam file objek ini akan menimpa hanya fungsi-fungsi yang meninggalkan yang lain.Untuk informasi lebih lanjut tentang perpustakaan bersama, kunjungi http://tldp.org/HOWTO/Program-Library-HOWTO/ Shared-libraries.html
sumber
Berikut ini adalah posting blog terperinci tentang preloading:
https://blog.cryptomilk.org/2014/07/21/what-is-preloading/
sumber
mudah diekspor
mylib.so
ke env:untuk menonaktifkan:
sumber
unset LD_PRELOAD
ketika LD_PRELOAD digunakan, file akan dimuat sebelum
$export LD_PRELOAD=/path/lib
lib lain untuk dimuat sebelumnya, bahkan ini dapat digunakan dalam program jugasumber
Dengan menggunakan
LD_PRELOAD
jalur, Anda dapat memaksa pemuat aplikasi memuat objek yang disediakan bersama, melebihi standar yang disediakan.Pengembang menggunakan ini untuk men-debug aplikasi mereka dengan menyediakan berbagai versi objek yang dibagikan.
Kami telah menggunakannya untuk meretas aplikasi tertentu, dengan mengesampingkan fungsi yang ada menggunakan objek bersama yang disiapkan.
sumber