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.