Ik kwam er onlangs een verwijzing naar tegen op proggiten (vanaf nu) wordt het niet uitgelegd.
Ik vermoed dat dithet zou kunnen zijn, maar ik weet het niet zeker.
Antwoord 1, autoriteit 100%
Als u LD_PRELOAD
instelt op het pad van een gedeeld object, wordt dat bestand vóórelke andere bibliotheek geladen (inclusief de C-runtime, libc.so
). Dus om ls
uit te voeren met uw speciale malloc()
implementatie, doe dit:
$ LD_PRELOAD=/path/to/my/malloc.so /bin/ls
Antwoord 2, autoriteit 12%
Je kunt symbolen in de standaardbibliotheken overschrijven door een bibliotheek met dezelfde symbolen te maken en de bibliotheek op te geven in LD_PRELOAD
.
Sommige mensen gebruiken het om bibliotheken op niet-standaard locaties te specificeren, maar LD_LIBRARY_PATH
is beter voor dat doel.
Antwoord 3, autoriteit 9%
Met LD_PRELOAD
kun je bibliotheken voorrang geven.
Je kunt bijvoorbeeld een bibliotheek schrijven die malloc
en free
implementeert. En door deze te laden met LD_PRELOAD
worden uw malloc
en free
uitgevoerd in plaats van de standaard.
Antwoord 4, autoriteit 9%
Zoals veel mensen al zeiden, gebruik je LD_PRELOAD
om de bibliotheek vooraf te laden. Trouwens, je kunt CONTROLERENof de instelling beschikbaar is met het ldd
commando.
Voorbeeld: stel dat je je eigen libselinux.so.1
vooraf moet laden.
> ldd /bin/ls
...
libselinux.so.1 => /lib/x86_64-linux-gnu/libselinux.so.1 (0x00007f3927b1d000)
libacl.so.1 => /lib/x86_64-linux-gnu/libacl.so.1 (0x00007f3927914000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f392754f000)
libpcre.so.3 => /lib/x86_64-linux-gnu/libpcre.so.3 (0x00007f3927311000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f392710c000)
/lib64/ld-linux-x86-64.so.2 (0x00007f3927d65000)
libattr.so.1 => /lib/x86_64-linux-gnu/libattr.so.1 (0x00007f3926f07000)
Stel dus uw preload-omgeving in:
export LD_PRELOAD=/home/patric/libselinux.so.1
Controleer uw bibliotheek opnieuw:
>ldd /bin/ls
...
libselinux.so.1 =>
/home/patric/libselinux.so.1 (0x00007fb9245d8000)
...
Antwoord 5, autoriteit 2%
LD_PRELOAD
geeft een overzicht van gedeelde bibliotheken met functies die de standaardset overschrijven, net zoals /etc/ld.so.preload
dat doet. Deze worden geïmplementeerd door de loader /lib/ld-linux.so
. Als u slechts een paar geselecteerde functies wilt overschrijven, kunt u dit doen door een overschrijvend objectbestand te maken en LD_PRELOAD
in te stellen; de functies in dit objectbestand zullen alleen die functies overschrijven en andere laten zoals ze waren.
Ga voor meer informatie over gedeelde bibliotheken naar
http://tldp.org/HOWTO/Program-Library-HOWTO/shared -bibliotheken.html
Antwoord 6
het is gemakkelijk om mylib.so
naar env te exporteren:
$ export LD_PRELOAD=/path/mylib.so
$ ./mybin
Uitschakelen:
$ export LD_PRELOAD=
Antwoord 7
Hier is een gedetailleerd blogpost over PLOADENING:
https://blog.cryptomilk.org/2014/07 / 21 / WAT-IS-PRELOADING /
Antwoord 8
Wanneer LD_Preload wordt gebruikt, wordt dat bestand vóór een ander geladen
$export LD_PRELOAD=/path/lib
lib om vooraf te worden geladen, zelfs dit kan in programma’s ook
worden gebruikt
Antwoord 9
Gebruik LD_PRELOAD
PAD, U kunt de applicatievlader dwingen om het verstrekte gedeelde voorwerp van de gelegenheid te laden, via de verstrekte standaard.
Ontwikkelaars gebruiken dit om hun aanvragen te debuggen door verschillende versies van de gedeelde objecten te verstrekken.
We hebben het gebruikt om bepaalde applicaties te hacken, door bestaande functies te overschrijven met behulp van de voorbereide gedeelde objecten.