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_PATH

    LD_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! 🙂


Anmelden zum Antworten