GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie kann überprüft werden, welche gemeinsam genutzten Bibliotheken zur Laufzeit für einen bestimmten Prozess geladen werden?

Tatsächlich können Sie dies in Ihrem Code folgendermaßen tun:

#include <link.h>

using UnknownStruct = struct unknown_struct {
   void*  pointers[3];
   struct unknown_struct* ptr;
};
using LinkMap = struct link_map;

auto* handle = dlopen(NULL, RTLD_NOW);
auto* p = reinterpret_cast<UnknownStruct*>(handle)->ptr;
auto* map = reinterpret_cast<LinkMap*>(p->ptr);

while (map) {
  std::cout << map->l_name << std::endl;
  // do something with |map| like with handle, returned by |dlopen()|.
  map = map->l_next;
}

Der link_map enthält mindestens die Basisadresse und den absoluten Dateinamen. Es ist die Struktur, die tatsächlich von dlopen() zurückgegeben wird mit erstem Argument ungleich NULL. Weitere Einzelheiten finden Sie hier.


Andere Leute sind auf dem richtigen Weg. Hier sind ein paar Möglichkeiten.

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

Oder mit strace:

strace CMD.... 2>&1 | grep -E '^open(at)?\(.*\.so'

Beide gehen davon aus, dass gemeinsam genutzte Bibliotheken irgendwo in ihren Pfaden ".so" haben, aber Sie können das ändern. Die erste gibt eine ziemlich hübsche Ausgabe als eine Liste von Bibliotheken, eine pro Zeile. Der zweite listet weiterhin Bibliotheken auf, während sie geöffnet werden, das ist also schön.

Und natürlich lsof ...

lsof -p NNNN | awk '{print $9}' | grep '\.so'

Kann lsof sein - hilft das schweizer taschenmesser von linux?

Bearbeiten:zum Ausführen, lsof -p <pid> , listet alle möglichen nützlichen Informationen auf, zum Beispiel, ob der Prozess Java ist, listet alle offenen Jars auf - sehr cool ...


Linux
  1. Überprüfen Sie, wie lange die Ausführung eines Bash-Skripts mit dem Time-Befehl dauert

  2. So führen Sie den Rsync-Prozess im Hintergrund aus

  3. Wozu dient die .la-Datei von libtool?

  4. Wie finde ich heraus, welche Symbole alle aus einem gemeinsam genutzten Objekt exportiert werden?

  5. So überprüfen Sie die Heap-Größe für einen Prozess unter Linux

Was sind Zombie-Prozesse und wie findet und tötet man Zombie-Prozesse?

So führen Sie einen Befehl für eine bestimmte Zeit in Linux aus

Wie führe ich eine Anwendung für eine festgelegte Zeit in der Shell aus?

Überprüfen Sie das offene FD-Limit für einen bestimmten Prozess in Linux

Wozu dient die 'soname'-Option zum Erstellen gemeinsam genutzter Bibliotheken?

Oberster Linux-Befehl:Was sind us, sy, ni, id, wa, hi, si und st (für die CPU-Auslastung)?