linux objdump ldd

linux - ¿Cuál es la diferencia entre ldd y objdump?



(2)

Puedes ver la diferencia en la salida.

objdump es simplemente descargar lo que el propio objeto enumera como bibliotecas que contienen símbolos sin resolver.

ldd está listando qué bibliotecas ld.so realmente cargaría. Y sigue la gráfica hacia atrás, para que pueda ver qué cargarían esas bibliotecas. Así es como libpthread.so.0 termina en la salida de ldd, a pesar de no estar en la salida de objdump.

Entonces, ldd va a dar una imagen mucho mejor de lo que realmente necesita estar disponible en tiempo de ejecución. Pero, al resolver problemas de compilación / tiempo de enlace, objdump es bastante útil.

Estoy ejecutando estos dos comandos, y estoy obteniendo una salida diferente:

$ ldd `which ls` linux-gate.so.1 => (0x00db3000) libselinux.so.1 => /lib/i386-linux-gnu/libselinux.so.1 (0x00ba2000) librt.so.1 => /lib/i386-linux-gnu/librt.so.1 (0x007bf000) libacl.so.1 => /lib/i386-linux-gnu/libacl.so.1 (0x004ce000) libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0x00110000) libdl.so.2 => /lib/i386-linux-gnu/libdl.so.2 (0x00398000) /lib/ld-linux.so.2 (0x00dea000) libpthread.so.0 => /lib/i386-linux-gnu/libpthread.so.0 (0x00a83000) libattr.so.1 => /lib/i386-linux-gnu/libattr.so.1 (0x00d3d000)

y entonces

objdump -x `which ls` | grep NEEDED NEEDED libselinux.so.1 NEEDED librt.so.1 NEEDED libacl.so.1 NEEDED libc.so.6

¿Que pasa con eso? Pensé que ambos le dieron dependencias a la biblioteca? La razón por la que me importa es que sospecho que ldd es la correcta, pero estoy trabajando en Linux en ARM, donde no hay un ldd de lo que puedo decir ...


Vea el CÓMO de la biblioteca de programas , sección 3.5. Instalación y uso de una biblioteca compartida :

Cuidado: no ejecute ldd en un programa en el que no confíe. Como se indica claramente en el manual de ldd (1), ldd funciona (en ciertos casos) al establecer una variable de entorno especial (para objetos ELF, LD_TRACE_LOADED_OBJECTS) y luego ejecutar el programa. Puede ser posible que un programa que no sea de confianza obligue al usuario de ldd a ejecutar código arbitrario (en lugar de simplemente mostrar la información de ldd). Por lo tanto, por razones de seguridad, no use ldd en programas en los que no confía para ejecutar.