GNU/Linux >> Tutoriels Linux >  >> Linux

Comment vérifier quelles bibliothèques partagées sont chargées au moment de l'exécution pour un processus donné ?

En fait, vous pouvez le faire dans votre code de la manière suivante :

#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;
}

Le link_map structure contient au moins l'adresse de base et le nom de fichier absolu. C'est la structure qui est réellement retournée par dlopen() avec un premier argument non NULL. Pour plus de détails, voir ici.


D'autres personnes sont sur la bonne voie. Voici quelques façons.

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

Ou, avec strace :

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

Les deux supposent que les bibliothèques partagées ont ".so" quelque part dans leurs chemins, mais vous pouvez modifier cela. Le premier donne une sortie assez jolie sous la forme d'une simple liste de bibliothèques, une par ligne. Le second continuera à répertorier les bibliothèques au fur et à mesure de leur ouverture, donc c'est bien.

Et bien sûr lsof ...

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

Peut être lsof - le couteau suisse de linux vous aidera ?

edit :pour exécuter, lsof -p <pid> , répertorie toutes sortes d'informations utiles, par exemple, si le processus est java, répertorie tous les jars ouverts - très cool...


Linux
  1. "quel" équivalent pour les bibliothèques partagées ?

  2. Vérifiez combien de temps un script bash prend pour s'exécuter avec la commande Time

  3. Comment exécuter le processus Rsync en arrière-plan

  4. A quoi sert le fichier .la de libtool ?

  5. Comment puis-je savoir ce que tous les symboles sont exportés à partir d'un objet partagé ?

Comment vérifier quels modules Apache sont activés/chargés sous Linux

Comment exécuter une commande pendant une durée spécifique sous Linux

Vérifier le processus si le même est en cours d'exécution ?

Comment vérifier quels signaux un processus écoute ?

Comment exécuter une application pendant une durée définie dans Shell ?

Vérifier la limite FD ouverte pour un processus donné sous Linux