¿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?
Max
fuente

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>
TomH
fuente
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.

Rich Homolka
fuente
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.

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

Nobutarou
fuente
¿Por qué quieres que el usuario intente eso? Por favor edite su respuesta para una mejor comprensión.
CaldeiraG