Library preloading funktioniert nicht
-
Hi,
ich habe eine Lib erstellt und die würde ich gerne explizit vor Ausführung meines anderen Programms, laden. Dabei modifiziere ich in der Shell LD_LIBRARY_PATHLD_LIBRARY_PATH=./:$LD_LIBRARY_PATH
Anschließend rufe ich mein Programm folgend auf:
LD_PRELOAD=mylibrary.so ./my_prg
Leider erhalte ich folgende Fehlermeldung:
"ERROR: ld.so: object 'library.so' from LD_PRELOAD cannot be preloaded: ignored."
Weiß jemand weiter? Um genau zu sein, versuche ich das letzte Beispiel auszuführen:
http://www.thegeekstuff.com/2012/03/reverse-engineering-tools/
Danke im Voraus!
L. G.
Steffo
-
Steffo schrieb:
LD_LIBRARY_PATH=./:$LD_LIBRARY_PATH
Da fehlt möglicherweise ein "export", also
export LD_LIBRARY_PATH=./:"$LD_LIBRARY_PATH"
-
Danke, jetzt funktionierts! Die Seite ist wirklich voller Fehler...
Aber mich wundert es ehrlich gesagt, weshalb es ohne export nicht funktioniert, weil export = global und ich hatte ja alles in der selben Shell ausgeführt...
-
Steffo schrieb:
Aber mich wundert es ehrlich gesagt, weshalb es ohne export nicht funktioniert, weil export = global und ich hatte ja alles in der selben Shell ausgeführt...
export heißt nicht global. export bedeutet bei einer üblichen Linux-Shell, dass die so markierte Umgebungsvariable an Kindprozesse vererbt wird. Ohne export ist die Shell-Variable nur in der aktuellen Shell sichtbar, wird aber nicht an Kindprozesse weitergereicht.
LD_PRELOAD=mylibrary.so ./my_prg
funktioniert übrigens nur, weil das eine Sonderform ist. Wenn du eine Variable direkt vor einem Befehl setzt, ist es so, als wäre dort implizit ein export (und die Variable lokal für diesen Befehl).
Was also auch gehen müsste, ist
LD_LIBRARY_PATH=./:"$LD_LIBRARY_PATH" LD_PRELOAD=mylibrary.so ./my_prg
-
Ah, super, danke!