¿Cómo puedo encontrar fácilmente las dependencias directas de objetos compartidos de un binario de Linux en formato ELF?
Conozco la herramienta ldd, pero parece que genera todas las dependencias de un binario, incluidas las dependencias de los objetos compartidos de los que depende el binario.
Respuestas:
Puede usar
readelf
para explorar los encabezados ELF.readelf -d
enumerará las dependencias directas comoNEEDED
secciones.fuente
Si quieres encontrar dependencias recursivamente (incluidas las dependencias de dependencias, dependencias de dependencias de dependencias, etc.) ...
Puedes usar el
ldd
comando. ldd: imprime dependencias de biblioteca compartidafuente
La
objdump
herramienta puede brindarle esta información. Si invocaobjdump
con la-x
opción, para que muestre todos los encabezados, encontrará las dependencias de los objetos compartidos al principio en la "Sección dinámica".Por ejemplo, ejecutar
objdump -x /usr/lib/libXpm.so.4
en mi sistema proporciona la siguiente información en la "Sección dinámica":Las dependencias directas de objetos compartidos se enumeran como valores 'NECESARIOS'. Entonces, en el ejemplo anterior,
libXpm.so.4
en mi sistema solo necesitalibX11.so.6
ylibc.so.6
.Es importante tener en cuenta que esto no significa que todos los símbolos necesarios para el binario que se pasa
objdump
estarán presentes en las bibliotecas, pero al menos muestra a qué bibliotecas intentará cargar el cargador al cargar el binario.fuente
ldd -v imprime el árbol de dependencias en la sección "Información de la versión: '. El primer bloque en esa sección son las dependencias directas del binario.
Ver jerárquico ldd (1)
fuente
objdump -x <binary> | grep "NEEDED"
? Quiero decir, ambos son casi exactamente lo mismo, solo estoy obteniendo un.so
archivo másldd
queobjdump
. Pero el hecho de que los resultados no sean los mismos me hace preguntarme qué método es más preciso.