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.