2012-01-24 8 views
5

Si ejecuto objdump -d en un archivo (linux amd64) .o, las llamadas de función se muestran sin la resolución de tiempo del enlace realizada. Ejemplo:objdump y resolver el enlace de las llamadas a funciones locales?

90: 66 89 44 24 1c   mov %ax,0x1c(%rsp) 
    95: 44 89 74 24 10   mov %r14d,0x10(%rsp) 
    9a: e8 00 00 00 00   callq 9f <foo+0x9f> 
    9f: 83 f8 ff    cmp $0xffffffffffffffff,%eax 
    a2: 74 5e     je  102 <foo+0x102> 

Una rama dentro de la función se muestra correctamente, pero el callq es sólo el talón de poner en por el enlazador (con cuatro bytes de ceros disponibles para el enlazador para poner una dirección apropiada en).

¿Hay alguna manera, sin realmente vincular, de obtener una lista de ensamblaje que tenga resueltos los nombres de las funciones? No me importa la dirección que eventualmente se utilizará, solo el nombre de la función. Esa información tiene que estar en el archivo .o, ya que el vinculador debe consumirlo para hacer su trabajo.

Lo pregunto porque la librería compartida de que el código en cuestión entra en se trata de 140 MB, y se necesita un tiempo tiempo para correr objdump -d en que para obtener el volcado asm con todas las llamadas a funciones resueltos a su real nombres.

+0

que he descubierto una solución para mi problema específico. Puedo ejecutar nm para obtener la dirección de la función en nuestra gran biblioteca compartida, y luego ejecutar objdump con --start-address utilizando esa salida nm. Todavía estaría interesado en una respuesta a la pregunta original, aunque si es posible. –

Respuesta

12

¿Hay alguna manera, sin realmente vincular, de obtener una lista de ensamblaje que tenga resueltos los nombres de las funciones?

Sí: El uso objdump -dr foo.o

Cuestiones relacionadas