¿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
readelfpara explorar los encabezados ELF.readelf -denumerará las dependencias directas comoNEEDEDsecciones.fuente
Si quieres encontrar dependencias recursivamente (incluidas las dependencias de dependencias, dependencias de dependencias de dependencias, etc.) ...
Puedes usar el
lddcomando. ldd: imprime dependencias de biblioteca compartidafuente
La
objdumpherramienta puede brindarle esta información. Si invocaobjdumpcon la-xopció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.4en 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.4en mi sistema solo necesitalibX11.so.6ylibc.so.6.Es importante tener en cuenta que esto no significa que todos los símbolos necesarios para el binario que se pasa
objdumpestará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.soarchivo máslddqueobjdump. Pero el hecho de que los resultados no sean los mismos me hace preguntarme qué método es más preciso.