En un entorno de sistema operativo Linux, los ejecutables binarios asociados con las aplicaciones/programas que desea ejecutar están directamente vinculados con bibliotecas compartidas cargadas en tiempo de ejecución.
Como usuario de Linux curioso y en evolución, se sentirá tentado a hacerse una idea acerca de estas bibliotecas compartidas involucradas/vinculadas con los ejecutables binarios que está ejecutando durante el inicio normal de un programa.
Este artículo nos guiará a través de varios enfoques para descubrir todas las bibliotecas compartidas utilizadas por los ejecutables en Linux.
Breve descripción general de las bibliotecas de Linux
Un programador o un usuario familiarizado con el mundo de la programación definirá una biblioteca como piezas de código/segmentos precompilados reunidos de manera/formato organizado. La naturaleza/atributo precompilado de una biblioteca hace que sea flexible y fácil de reutilizar entre diferentes programas.
Bajo la arquitectura del sistema operativo Linux, podemos clasificar las bibliotecas como estáticas (bibliotecas estáticas ) o compartido (bibliotecas compartidas ).
Las bibliotecas estáticas están vinculadas estáticamente a un programa específico y solo se puede acceder a ellas durante el tiempo de compilación del programa. Las bibliotecas compartidas se activan una vez que se inicia un programa y residirán en la memoria durante la duración del tiempo de ejecución del programa.
Cómo encontrar las bibliotecas compartidas de un programa en Linux
Antes de determinar las bibliotecas compartidas asociadas con su programa de destino, primero debe saber dónde reside el ejecutable asociado con su programa. En Linux, la ubicación de los ejecutables de sus programas suele estar dentro de /usr/bin directorio.
$ ls -l /usr/bin
La columna en el extremo derecho enumera los nombres de los ejecutables de sus programas.
Encuentre bibliotecas compartidas del programa Linux usando el comando ldd
El ldd El comando existe como un script de shell sencillo que apunta a las bibliotecas compartidas de un programa. Según la captura de pantalla anterior, intentemos, por ejemplo, generar las bibliotecas compartidas asociadas con la aplicación anydesk.
Podríamos determinar la ubicación del ejecutable de Anydesk con el comando:
$ whereis anydesk
Para determinar sus bibliotecas compartidas a través de ldd comando, ejecutaremos:
$ ldd /usr/bin/anydesk
Como puede ver, tenemos una lista de numerosas bibliotecas asociadas con anydesk solicitud. Tenga en cuenta que el ldd El comando tiende a ejecutar programas consultados para recuperar información de bibliotecas compartidas. Por lo tanto, solo asocie el comando con ejecutables confiables.
Encuentre bibliotecas compartidas de programas usando los comandos objdump y grep
El objdump comando que forma parte de GNU Binutils El paquete se centrará en mostrar la información de los archivos de objetos, mientras que grep El comando enumerará las bibliotecas compartidas asociadas del programa.
Veamos qué producirán estos comandos para un programa como whois utilizado para información de nombres de dominio.
$ whereis whois
A continuación, descubra las bibliotecas compartidas del programa.
$ objdump -p /usr/bin/whois | grep 'NEEDED'
Como puede ver, el whois El ejecutable del programa de búsqueda de dominio está asociado con dos bibliotecas compartidas.
Alternativamente, también puede usar el readelf comando para recuperar información compartida para el ejecutable del programa zip.
$ whereis zip $ readelf --dynamic /usr/bin/zip | grep NEEDED
Según el resultado, el zip El ejecutable del programa está asociado con dos bibliotecas compartidas.
Encuentre bibliotecas compartidas usando el comando Awk
Esta opción es ideal para un programa que ya se está ejecutando. Primero necesitamos obtener su PID (ID de proceso ). Por ejemplo, digamos que tenemos el Flameshot Utilidad de captura de pantalla ejecutándose.
Para obtener su PID , ejecutaremos:
$ pgrep flameshot 45261
Nuestro /proc/
$ awk '$NF!~/\.so/{next} {$0=$NF} !a[$0]++' /proc/45261/maps
Ahora conocemos bien la lista de todas las bibliotecas compartidas asociadas con los ejecutables del programa en Linux.