Skip to main content

WIE MAN: Finden Sie die gemeinsam genutzten Bibliotheken eines Programms mit dem Befehl "ldd" - 2020

Wichtige CMD-Befehle! (November 2020).

Anonim

Verwenden Sie die ldd Befehl, um die gemeinsam genutzten Bibliotheken anzuzeigen, die für ein bestimmtes Programm erforderlich sind - nützlich für das Ausarbeiten, wenn eine Abhängigkeit fehlt. Der Befehl listet auch fehlende Funktionen und Objekte auf.

ldd-Befehlssyntax

Beachten Sie die korrekte Syntax für den Befehl ldd, um Fehler zu vermeiden:

ldd OPTION … DATEI …

Verwenden Sie einen oder mehrere der verfügbaren Ldd-Befehlsschalter MÖGLICHKEIT Stelle im obigen Befehl ein:

--help | Diese Hilfe ausdrucken und beenden --version | Versionsinformationen drucken und beenden -d, --data-relocs | Prozessdatenverlagerungen -r, --funktions-relocs | Prozessdaten und Funktionsverlagerungen -u, --unused | ungenutzte direkte Abhängigkeiten drucken -v, --verbose | Alle Informationen ausdrucken

So verwenden Sie den Befehl Ldd

Führen Sie den folgenden Befehl aus, um weitere Informationen zu einem Programm zu erhalten:

$ ldd -v / Pfad / zu / Programm / ausführbar

Die Ausgabe zeigt Versionsinformationen sowie die Pfade und Adressen zu den gemeinsam genutzten Bibliotheken wie folgt an:

$ ldd libshared.so linux-vdso.so.1 => (0x00007fff26ac8000) libc.so.6 => /lib/libc.so.6 0x00007ff1df55a000) /lib64/ld-linux-x86-64.so.2 (0x00007ff1dfafe000)

Wenn die SO-Datei überhaupt nicht vorhanden ist, können Sie die fehlenden Bibliotheken mithilfe des folgenden Befehls finden:

$ ldd -d Pfad / zu / Programm

Die Ausgabe ähnelt der folgenden:

linux-vdso.so.1 (0x00007ffc2936b000) /home/gary/demo/garylib.so => ​​nicht foundlibc.so.6 => usr / lib / libc.so.6 (0x00007fd0c6259000) /lib64/ld-linux-x86-64.so.2 (0x00007fd0c65fd000)

Führen Sie den Befehl ldd niemals gegen ein nicht vertrauenswürdiges Programm aus, da das Programm es möglicherweise tatsächlich ausführt. Verwenden Sie stattdessen eine sicherere Alternative, die nur die direkten Abhängigkeiten und nicht den gesamten Abhängigkeitsbaum anzeigt:

$ objdump -p / pfad / zum / programm | grep BEDARF

So finden Sie den Pfad zu einer Anwendung

Sie müssen den vollständigen Pfad zu einer Anwendung angeben, wenn Sie die Abhängigkeiten mit ldd ermitteln möchten. Dies kann auf verschiedene Arten erfolgen.

So finden Sie beispielsweise den Pfad zu Firefox:

$ find / -name firefox

Das Problem mit dem Befehl find ist jedoch, dass nicht nur die ausführbare Datei aufgelistet wird, sondern überall, wo sich Firefox befindet, wie folgt:

  • /etc/skel/.mozilla/firefox
  • / home cache / mozilla / firefox
  • /home.mozilla/firefox
  • / usr / bin / Firefox
  • / usr / lib / Firefox
  • / usr / lib / Firefox / Firefox

Dieser Ansatz ist ein wenig übertrieben, und Sie müssen möglicherweise den Befehl sudo verwenden, um Ihre Berechtigungen zu erhöhen. Andernfalls erhalten Sie wahrscheinlich eine Vielzahl von Fehlern, die von Berechtigungen abgelehnt werden.

Stattdessen ist es mit dem Befehl whereis viel einfacher, den Pfad einer Anwendung zu finden:

$ Whereis Firefox

Diesmal könnte die Ausgabe so aussehen:

/ usr / bin / firefox

/ etc / firefox

/ usr / lib / firefox

Um die gemeinsam genutzten Bibliotheken für Firefox zu finden, müssen Sie nur den folgenden Befehl eingeben:

$ ldd / usr / bin / firefox

Die Ausgabe des Befehls sieht etwa so aus:

linux-vdso.so.1 (0x00007ffff8364000)libpthread.so.0 => /usr/lib/libpthread.so.0 (0x00007feb9917a000)libdl.so.2 => /usr/lib/libdl.so.2 (0x00007feb98f76000)libstdc ++. so.6 => /usr/lib/libstdc++.so.6 (0x00007feb98bf4000)libm.so.6 => /usr/lib/libm.so.6 (0x00007feb988f6000)libgcc_s.so.1 => /usr/lib/libgcc_s.so.1 (0x00007feb986e0000)libc.so.6 => /usr/lib/libc.so.6 (0x00007feb9833c000)/lib64/ld-linux-x86-64.so.2 (0x00007feb99397000)

Linux-vdso.so.1 ist der Name der Bibliothek und die Hex-Nummer ist die Adresse, unter der die Bibliothek in den Speicher geladen wird.

In vielen anderen Zeilen werden Sie feststellen, dass auf das Symbol => ein Pfad folgt. Dies ist der Pfad zur physischen Binärdatei. Die Hex-Nummer ist die Adresse, an der die Bibliothek geladen wird.