¿Cómo ver los objetos compartidos cargados actualmente en Linux?


34

Tengo dos preguntas relacionadas:

  • ¿Cómo puedo ver si una biblioteca compartida está cargada actualmente? (es decir, en todo el sistema, independiente del proceso)
  • ¿Cómo puedo ver todas las bibliotecas compartidas cargadas por un proceso?

Respuestas:


40

Puedes hacer ambas cosas con lsof. Para ver qué procesos tienen una biblioteca abierta o asignada, haga lo siguiente:

lsof /path/to/lib.so

y para ver qué archivos (incluidas las bibliotecas compartidas) ha abierto y / o asignado un proceso, haga lo siguiente:

lsof -p <pid>

22

Otra forma de ver lo que se carga en un proceso es mirando el /proc/PID/mapsarchivo. Esto muestra todo lo mapeado en su espacio de direcciones, incluidos los objetos compartidos mapeados.


Funcionó bien en mi plataforma ARM integrada. Mientras que la implementación de BusyBox lsofno tenía la funcionalidad necesaria.
Alex Che

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

es una buena manera de explorar todo lo /proc/PID/maps mencionado por Rich a la vez. Salida de muestra:

/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

Además awky bash-fu puede refinar aún más la salida.

Este método también muestra bibliotecas abiertas con dlopen, probadas con esta configuración mínima pirateada con un sleep(1000)en Ubuntu 18.04.


4

Puede ejecutar el siguiente comando por root y ver una lista completa,

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

Esto es para usuarios que no tienen lsof.


¿Por qué quieres que el usuario intente eso? Por favor edite su respuesta para una mejor comprensión.
CaldeiraG
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.