Comment voir les objets partagés actuellement chargés sous Linux?


34

J'ai deux questions liées:

  • Comment puis-je voir si une bibliothèque partagée est actuellement chargée? (c.-à-d. à l'échelle du système, agnostique au processus)
  • Comment puis-je voir toutes les bibliothèques partagées chargées par un processus?

Réponses:


40

Vous pouvez faire les deux avec lsof. Pour voir quels processus ont une bibliothèque ouverte ou mappée, procédez comme suit:

lsof /path/to/lib.so

et pour voir quels fichiers (y compris les bibliothèques partagées) un processus a ouverts et / ou mappés, procédez comme suit:

lsof -p <pid>

22

Une autre façon de voir ce qui est chargé dans un processus est de regarder le /proc/PID/mapsfichier. Cela montre tout ce qui est mappé dans votre espace d'adressage, y compris les objets partagés mappés dans.


A bien fonctionné sur ma plate-forme ARM intégrée. Alors que l'implémentation de BusyBox lsofn'avait pas les fonctionnalités nécessaires.
Alex Che

7
sudo grep libcairo.so /proc/*/maps

est une belle façon d'explorer tous les éléments /proc/PID/maps mentionnés par Rich à la fois. Exemple de sortie:

/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

De plus awk, bash-fu peut affiner davantage la sortie.

Cette méthode montre également les bibliothèques ouvertes avec dlopen, testées avec cette configuration minimale piratée avec un sleep(1000)sur Ubuntu 18.04.


4

Vous pouvez exécuter la commande suivante par root et voir une liste complète,

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

C'est pour les utilisateurs qui n'ont pas lsof.


Pourquoi voulez-vous que l'utilisateur essaie cela? Veuillez modifier votre réponse pour une meilleure compréhension.
CaldeiraG
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.