GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cómo verificar qué bibliotecas compartidas se cargan en tiempo de ejecución para un proceso determinado?

En realidad, puedes hacer esto en tu código de la siguiente manera:

#include <link.h>

using UnknownStruct = struct unknown_struct {
   void*  pointers[3];
   struct unknown_struct* ptr;
};
using LinkMap = struct link_map;

auto* handle = dlopen(NULL, RTLD_NOW);
auto* p = reinterpret_cast<UnknownStruct*>(handle)->ptr;
auto* map = reinterpret_cast<LinkMap*>(p->ptr);

while (map) {
  std::cout << map->l_name << std::endl;
  // do something with |map| like with handle, returned by |dlopen()|.
  map = map->l_next;
}

El link_map estructura contiene al menos la dirección base y el nombre de archivo absoluto. Es la estructura que en realidad devuelve dlopen() con primer argumento no NULL. Para obtener más detalles, consulte aquí.


Otras personas están en el camino correcto. Aquí hay un par de formas.

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

O, con strace:

strace CMD.... 2>&1 | grep -E '^open(at)?\(.*\.so'

Ambos asumen que las bibliotecas compartidas tienen ".so" en algún lugar de sus rutas, pero puede modificar eso. El primero da un resultado bastante bonito como una lista de bibliotecas, una por línea. El segundo seguirá enumerando las bibliotecas a medida que se abren, así que está bien.

Y por supuesto lsof ...

lsof -p NNNN | awk '{print $9}' | grep '\.so'

Puede ser lsof - ¿La navaja suiza de Linux ayudará?

editar:para ejecutar, lsof -p <pid> , enumera todo tipo de información útil, por ejemplo, si el proceso es Java, enumera todos los archivos jar abiertos, muy bueno...


Linux
  1. ¿Comprobar el proceso si se está ejecutando lo mismo?

  2. ¿"cuál" equivalente para bibliotecas compartidas?

  3. ¿Cómo verificar qué señales está escuchando un proceso?

  4. ¿Cómo ejecutar la aplicación durante un tiempo determinado en Shell?

  5. Compruebe cuánto tarda en ejecutarse un script de Bash con el comando de tiempo

Cómo verificar qué módulos de Apache están habilitados/cargados en Linux

¿Qué son los procesos zombis y cómo encontrar y eliminar procesos zombis?

Cómo ejecutar un comando durante un tiempo específico en Linux

¿Para qué sirve la opción 'soname' para crear bibliotecas compartidas?

Comando superior de Linux:¿Qué somos, sy, ni, id, wa, hi, si y st (para uso de CPU)?

Cómo encontrar el archivo .pid para un proceso dado