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?
Max
la source

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>
TomH
la source
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.

Rich Homolka
la source
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.

Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
la source
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.

Nobutarou
la source
Pourquoi voulez-vous que l'utilisateur essaie cela? Veuillez modifier votre réponse pour une meilleure compréhension.
CaldeiraG