Buscar bibliotecas con las que se vinculó un binario

Buscar bibliotecas con las que se vinculó un binario

Sé que hay un comando que me enumera las bibliotecas y las versiones respectivas a las que se vinculó un software.

¿Algo con ld o libtool?

Pero simplemente no puedo recordarlo. Pasé algún tiempo en Google pero no encontré nada útil.

Actualizar
ldd <binary>ayudaría en Linux, (de@Ernelli) mientras descubrí que otool -L <binary>hace algo similar en MacOS X.

Respuesta1

Prueba lddejecutivo-binario

Ejemplo:

~$ ldd /bin/bash
    linux-gate.so.1 =>  (0x00606000)
    libncurses.so.5 => /lib/libncurses.so.5 (0x00943000)
    libdl.so.2 => /lib/tls/i686/cmov/libdl.so.2 (0x00c5d000)
    libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0x003e9000)
    /lib/ld-linux.so.2 (0x00a41000)

Respuesta2

Para encontrar lo que necesita directamente:

readelf -d APP | grep NEEDED

lddcomo se mencionó en otra parte, mostrará todas las bibliotecas directas e indirectas: todo lo que necesita en tiempo de ejecución. Puede que esta no sea una lista completa, ya que puedes abrir cosas dinámicamente con dlopen(), pero esto debería funcionar el 99% de las veces.

ld y libtool se utilizan en el momento de la compilación/enlace. No son útiles una vez que tienes una aplicación.

EDITARPuedo ver en las respuestas posteriores que preguntaste sobre OSX, pero quiero agregar a mi respuesta sobre las herramientas de Linux:

Una cosa que olvidé mencionar hace bastante tiempo; preguntaste sobre las versiones. Ninguno de lddlos dos readelfresponderá a la pregunta "qué versión". Le indicarán el nombre de archivo de la biblioteca que está buscando y la convención de nomenclatura puede tener información sobre la versión, pero nada lo exige. Los símbolos pueden tener versiones, y tendrías que hacer mucho en un nivel aún más bajo para nmverlos.

Respuesta3

Otra forma sería utilizar objdump.

objdump -x "binario" | grep NECESARIO

Esto muestra todas las dependencias necesarias solo para este binario. Muy útil.

Respuesta4

ElOtras respuestaste pierdas un punto importante:

Las bibliotecas compartidas pueden serdirectamentevinculado, oindirectamentevinculado a través de otra lib.

Sólo para eldirectamente vinculado:

objdump --private-headers "${bin}" | grep 'NECESARIO' | cortar --delimiter=' ' --fields=18-

Paratodo:

ldd "${bin}" | cortar --fields=2 | cortar --delimiter='' --fields=1 | rev. | cortar --delimiter='/' --fields=1 | rev. | ordenar --único --versión-ordenar

información relacionada