Come vedere gli oggetti condivisi attualmente caricati su Linux?


34

Ho due domande correlate:

  • Come posso vedere se una libreria condivisa è attualmente caricata? (ovvero a livello di sistema, agnostico di processo)
  • Come posso vedere tutte le librerie condivise caricate da un processo?

Risposte:


40

Puoi fare entrambe le cose con lsof. Per vedere quali processi hanno aperto o mappato una libreria:

lsof /path/to/lib.so

e per vedere quali file (comprese le librerie condivise) un processo ha aperto e / o mappato, fai:

lsof -p <pid>

22

Un altro modo per vedere cosa viene caricato in un processo è guardare il /proc/PID/mapsfile. Questo mostra tutto ciò che è mappato nello spazio degli indirizzi, inclusi gli oggetti condivisi associati.


Ha funzionato bene sulla mia piattaforma ARM integrata. Mentre l'implementazione di BusyBox di lsofnon aveva le funzionalità necessarie.
Alex Che il

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

è un bel modo per esplorare tutto ciò che è stato /proc/PID/maps citato da Rich contemporaneamente. Uscita campione:

/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

Inoltre awke bash-fu può affinare ulteriormente la produzione.

Questo metodo mostra anche le librerie aperte con dlopen, testate con questa configurazione minima hackerata con un sleep(1000)su Ubuntu 18.04.


4

Puoi eseguire il comando successivo da root e visualizzare un elenco completo,

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

Questo è per gli utenti che non hanno lsof.


Perché vuoi che l'utente lo provi? Si prega di modificare la risposta ad una migliore comprensione.
CaldeiraG,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.