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?

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>

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.


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 .


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.


Warum soll der Benutzer das versuchen? Bitte bearbeiten Sie Ihre Antwort zum besseren Verständnis.
CaldeiraG
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.