Wat is de LD_PRELOAD-truc?

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_PRELOADinstelt op het pad van een gedeeld object, wordt dat bestand vóórelke andere bibliotheek geladen (inclusief de C-runtime, libc.so). Dus om lsuit 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_PATHis beter voor dat doel.


Antwoord 3, autoriteit 9%

Met LD_PRELOADkun je bibliotheken voorrang geven.

Je kunt bijvoorbeeld een bibliotheek schrijven die mallocen freeimplementeert. En door deze te laden met LD_PRELOADworden uw mallocen freeuitgevoerd in plaats van de standaard.


Antwoord 4, autoriteit 9%

Zoals veel mensen al zeiden, gebruik je LD_PRELOADom de bibliotheek vooraf te laden. Trouwens, je kunt CONTROLERENof de instelling beschikbaar is met het lddcommando.

Voorbeeld: stel dat je je eigen libselinux.so.1vooraf 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_PRELOADgeeft een overzicht van gedeelde bibliotheken met functies die de standaardset overschrijven, net zoals /etc/ld.so.preloaddat 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_PRELOADin 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.sonaar 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/liblib om vooraf te worden geladen, zelfs dit kan in programma’s ook

worden gebruikt


Antwoord 9

Gebruik LD_PRELOADPAD, 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.

Other episodes