Wie werden die aktuell geladenen freigegebenen Objekte in Linux angezeigt?

34

Ich habe zwei verwandte Fragen:

  • Wie kann ich sehen, ob derzeit eine gemeinsam genutzte Bibliothek geladen ist? (dh systemweit, prozessunabhängig)
  • Wie kann ich alle gemeinsam genutzten Bibliotheken anzeigen, die von einem Prozess geladen wurden?
Max
quelle

Antworten:

40

Du kannst beides mit machen lsof. Um zu sehen, welche Prozesse eine Bibliothek geöffnet oder zugeordnet haben, gehen Sie wie folgt vor:

lsof /path/to/lib.so

und um zu sehen, welche Dateien (einschließlich gemeinsam genutzter Bibliotheken) ein Prozess geöffnet und / oder zugeordnet hat, gehen Sie wie folgt vor:

lsof -p <pid>
TomH
quelle
22

Eine andere Möglichkeit, um zu sehen, was in einem Prozess geladen ist, besteht darin, sich die /proc/PID/mapsDatei anzusehen. Dies zeigt alles an, was Ihrem Adressraum zugeordnet ist, einschließlich freigegebener Objekte, die in zugeordnet sind.

Reiche Homolka
quelle
Funktionierte gut auf meiner eingebetteten ARM-Plattform. Während die BusyBox-Implementierung lsofnicht die benötigte Funktionalität hatte.
Alex Che
7
sudo grep libcairo.so /proc/*/maps

ist eine schöne Möglichkeit, alle /proc/PID/maps von Rich erwähnten auf einmal zu erkunden . Beispielausgabe:

/proc/8390/maps:7f0a9afae000-7f0a9b0bc000 r-xp 00000000 fc:00 274690                     /usr/lib/x86_64-linux-gnu/libcairo.so.2.11400.6
/proc/8390/maps:7f0a9b0bc000-7f0a9b2bc000 ---p 0010e000 fc:00 274690                     /usr/lib/x86_64-linux-gnu/libcairo.so.2.11400.6
/proc/8390/maps:7f0a9b2bc000-7f0a9b2bf000 r--p 0010e000 fc:00 274690                     /usr/lib/x86_64-linux-gnu/libcairo.so.2.11400.6
/proc/8390/maps:7f0a9b2bf000-7f0a9b2c0000 rw-p 00111000 fc:00 274690                     /usr/lib/x86_64-linux-gnu/libcairo.so.2.11400.6
/proc/8466/maps:7f0a9afae000-7f0a9b0bc000 r-xp 00000000 fc:00 274690                     /usr/lib/x86_64-linux-gnu/libcairo.so.2.11400.6
/proc/8466/maps:7f0a9b0bc000-7f0a9b2bc000 ---p 0010e000 fc:00 274690                     /usr/lib/x86_64-linux-gnu/libcairo.so.2.11400.6
/proc/8466/maps:7f0a9b2bc000-7f0a9b2bf000 r--p 0010e000 fc:00 274690                     /usr/lib/x86_64-linux-gnu/libcairo.so.2.11400.6
/proc/8466/maps:7f0a9b2bf000-7f0a9b2c0000 rw-p 00111000 fc:00 274690                     /usr/lib/x86_64-linux-gnu/libcairo.so.2.11400.6

Further awkund bash-fu können die Ausgabe weiter verfeinern.

Diese Methode zeigt auch Bibliotheken an dlopen, die mit diesem minimalen Setup geöffnet wurden , das mit sleep(1000)Ubuntu 18.04 gehackt wurde .

Ciro Santilli ist ein Schauspieler
quelle
4

Sie können den nächsten Befehl von root ausführen und eine vollständige Liste anzeigen.

cat /proc/*/maps | awk '{print $6;}' | grep '\.so' | sort | uniq

Dies ist für Benutzer, die nicht über lsof verfügen.

Nobutarou
quelle
Warum soll der Benutzer das versuchen? Bitte bearbeiten Sie Ihre Antwort zum besseren Verständnis.
CaldeiraG