Como ver os objetos compartilhados atualmente carregados no Linux?

22

Eu tenho duas perguntas relacionadas:

  • Como posso ver se uma biblioteca compartilhada está atualmente carregada? (isto é, agnóstico em todo o sistema)
  • Como posso ver todas as bibliotecas compartilhadas carregadas por um processo?
por Max 13.07.2011 / 20:40

4 respostas

25

Você pode fazer as duas coisas com lsof . Para ver quais processos têm uma biblioteca aberta ou mapeada, faça:

lsof /path/to/lib.so

e para ver quais arquivos (incluindo bibliotecas compartilhadas) um processo abriu e / ou mapeou, faça:

lsof -p <pid>
    
por 13.07.2011 / 21:18
21

Outra maneira de ver o que é carregado em um processo é observando o arquivo /proc/PID/maps . Isso mostra tudo mapeado em seu espaço de endereço, incluindo objetos compartilhados mapeados em.

    
por 14.07.2011 / 01:07
5
sudo grep libcairo.so /proc/*/maps

é uma boa maneira de explorar todos os /proc/PID/maps mencionados pelo Rich de uma só vez. Exemplo de saída:

/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

Além disso, awk e bash-fu podem refinar ainda mais a saída.

Este método também mostra bibliotecas abertas com dlopen , testadas com esta configuração mínima hackeada com um sleep(1000) no Ubuntu 18.04.

    
por 21.08.2017 / 22:15
1

Você pode executar o próximo comando por root e ver uma lista completa,

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

Isso é para usuários que não têm lsof.

    
por 03.05.2018 / 16:44