benötige Hilfe mit LD_PRELOAD

mandy28

Neuer User
Mitglied seit
15 Dez 2008
Beiträge
187
Punkte für Reaktionen
0
Punkte
16
wie ikann ch mit Hilfe von LD_PRELOAD
eine binary dazu bringen , die von mir vorgegebenen libs zu laden ??

Hatte es mit LD_LIBRARY_PATH versucht , jedoch läd die binarie dann die falsche lib aus /lib/
Code:
libpthread.so.0 => /lib/libpthread.so.0
anstatt aus /mod/lib/ , sollte ja dann so aussehen
Code:
libpthread.so.0 => /mod/lib/libpthread.so.0

In der Umgebungsvariablen
LD_PRELOAD können Sie eine Liste von Bibliotheken
angeben, die auf jeden Fall vor allen anderen geladen werden (egal
ob das Programm nach ihnen verlangt oder nicht). Damit ist es
möglich, gezielt einzelne Funktionen in bestimmten Bibliotheken
zu übersteuern
 
Mit ldd siehst du die verlinkten Bibliotheken zur Compilezeit. Ein Aufruf mit strace wird dir zutage brignen, was wirklich geladen wird.
 
Mit ldd siehst du die verlinkten Bibliotheken zur Compilezeit. Ein Aufruf mit strace wird dir zutage brignen, was wirklich geladen wird.

hab ich ja schon gemacht , darum weiß ich ja jetzt das einige libs falsch geladen werden.

mein Anliegen ist ja , das mit LD_PRELOAD zu beheben :p
 
Vielleicht könnten dir die Bemühungen ausd dem test-branch weiterhelfen, wo zusätzlich LD_RUN_PATH der uclibc aktiviert ist, und andere PFade für Bibliotheken genutzt werden. Die änderungen dort funktionieren soweit und implizieren, dass freetz-eigene Binaries in /usr/freetz/lib zuerst suchen.
Du hast mich aber falsch verstanden. Du zitierst dort ldd-Output. Und der bleibt - trotz korrektem LD_PRELOAD - gleich, denn das sind die Standard-PFade, die im Binary stehen, die man per ldd rausbekommt. LD_PRELOAD sorgt nur dafür, dass eine weitere Bibliothek vorweg geladen wird (oder auch mehrere, glaube ich) und LD_LIBRARY_PATH dann wohl, dass der Suchpfad für die Libs anders ist. So oder so aber findest du per "ldd" wohl immer das gleiche raus.
 
Ich habe LD_Preload immer so verwendet, daß ich die LD_Preload-Zeilen und den Aufruf des Eigentzlichen Programms in ein Script verpackt habe Welches ich dann anstelle des eigentlichen Programms gestartet habe. Wenn der Name gleich bleiben mußte habe ich das Eigentliche Programm noch in .bin umbenannt nd dem Script den Namen des Programms gegeben. Müssen Parameter übergeben werden habe ich an den Programmstart im Script noch "%1 %2 ....." angehäng.
.
 
Ist ja auch korrekt für LD_PRELOAD. Aber auch eine Umgebungsvariable tut seinen Zweck "export LD_PRELOAD='mein.unglaublich.wichtige.und.bessere.library'"

Aber wie gesagt, der test-branch tut eben genau etwas in der Richtung, ist nur noch nicht ganz "ausgereift" ;)
 
danke für Eure Hilfe

@chriwi

wie sollte denn so ein skript aussehen mit LD_PRELOAD. ?
 
Ein einfacher binary-Aufruf mit LD_PRELOAD sind so aus:

Code:
LD_PRELOAD="/usr/lib/myLib.so" /bin/ls
 
also das gleiche wie mit "LD_LIBRARY_PATH" nur eben durch "LD_PRELOAD" ersetzen.
Wenn ich s jetzt richtig verstanden hab.

Werde es dann mal testen und berichten
LD_RUN_PATH der uclibc aktivieren werde ich dann auch mal testen


danke bis hierhin :)


PS
Silent-Tears
Vielleicht könnten dir die Bemühungen ausd dem test-branch weiterhelfen, wo zusätzlich LD_RUN_PATH der uclibc aktiviert ist, und andere PFade für Bibliotheken genutzt werden.
Wo kann ich das finden ?
 
Zuletzt bearbeitet:
irrgendie klappts so doch nicht.

wie kann ich denn die LD_PRELOAD Lösung in mein addon einbinden bzw in die rc.
Das steht jetzt drin für die libs
Code:
LD_LIBRARY_PATH=/usr/lib/ /var/media/ftp/jump

kann oder muß dieser Eintrag stehen bleiben ? Und wie muß der LD_PRELOAD Eintrag aussehen.


erledigt
 
Zuletzt bearbeitet:
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.