¿Cómo se las arregla objdump para mostrar el código fuente con la opción-S?
linux gcc (3)
¿Hay alguna referencia al archivo fuente en el binario? Intenté ejecutar cadenas en el binario y no pude encontrar ninguna referencia al archivo de origen enumerado ...
La información enana en un binario almacena la asignación entre las instrucciones (el puntero de la instrucción o la IP en realidad) y el archivo de origen y el número de línea. El archivo de origen se especifica mediante la ruta completa, por lo que se puede encontrar incluso si el binario se mueve. Para ver esta información puede usar objdump --dwarf=decodedline <binary>
(el objdump --dwarf=decodedline <binary>
debe compilarse con -g
).
Una vez que digas objdump -S <binary>
usa esta información enana para darte el código fuente junto con el desensamblaje.
Mi entendimiento es que para que objdump
muestre el código fuente del código binario, hay una condición previa: la información de depuración DWARF debe compilarse en el binario. (por gcc -g sourcefile
o gcc -gdwarf-2 sourcefile
) Y al procesar esta información DWARF objdump
puede obtener el código fuente como @ vlcekmi3 y @vkrnt respondieron
objdump
utiliza la información de depuración DWARF compilada en el binario, que hace referencia al nombre del archivo fuente. Si el binario no está compilado con información de depuración u objdump
no puede encontrar el archivo fuente, entonces no obtiene el código fuente en su salida, solo el ensamblaje.
No ve el nombre del archivo fuente cuando usa strings
en el binario, porque DWARF usa compresión.