Esiste un riferimento al file sorgente nel file binario? Ho provato a eseguire stringhe sul file binario e non ho trovato alcun riferimento al file sorgente elencato ...In che modo objdump riesce a visualizzare il codice sorgente con l'opzione -S?
risposta
objdump
utilizza le informazioni di debug di DWARF compilate nel file binario, che fa riferimento al nome del file di origine. Se il file binario non è compilato con informazioni di debug, onon riesce a trovare il file sorgente, non si ottiene il codice sorgente nell'assembly di sola uscita.
Non viene visualizzato il nome del file di origine quando si utilizza strings
nel file binario, poiché DWARF utilizza la compressione.
Stai dicendo che dobbiamo compilare con debug nano abilitato e quindi usare ' objdump' (con alcune opzioni sconosciute) per visualizzare la sorgente intercalata con lo smontaggio? Potresti fornire i passaggi effettivi con i comandi effettivi? – jww
@jww: l'opzione '-g' di' gcc' abilita il debug delle informazioni, e l'opzione '-S' per objdump di rimuove con la sorgente interlacciata. Ma la domanda non stava chiedendo come fare questo; l'interrogante sapeva già che, invece, stavano chiedendo come fosse implementato (come 'objdump' trova la fonte da interporre). – caf
Le informazioni nane in un file binario memorizzano la mappatura tra istruzioni (il puntatore dell'istruzione o IP in realtà) e il file di origine e il numero di riga. Il file sorgente viene specificato utilizzando il percorso completo in modo che possa essere trovato anche se il file binario viene spostato. Per visualizzare queste informazioni è possibile utilizzare objdump --dwarf=decodedline <binary>
(il binario ofcourse deve essere compilato con -g
).
Una volta che si dice objdump -S <binary>
si utilizzano queste informazioni di tipo nano per fornire il codice sorgente insieme allo smontaggio.
Forse dovresti fornire un esempio dal vivo. Non riesco a ottenere 'objdump' per fornire sia lo smontaggio con i numeri di riga del codice sorgente interlacciati. – jww
La mia comprensione è che per objdump
per visualizzare il codice sorgente dal codice binario, esiste una condizione preliminare: le informazioni di debug di DWARF devono essere compilate nel file binario. (Da gcc -g sourcefile
o gcc -gdwarf-2 sourcefile
) E elaborando questa informazione NANO objdump
è in grado di ottenere il codice sorgente come @ vlcekmi3 e @vkrnt risposto
Stai dicendo che dobbiamo compilare con debug nano abilitato e quindi usare 'objdump' (con alcune opzioni sconosciute) per visualizzare la sorgente intercalata con lo smontaggio? Potresti fornire i passaggi effettivi con i comandi effettivi? – jww
Buona domanda, le risposte poveri (ad oggi). Vedi anche [Come posso ottenere le linee sorgente in linea con l'output dell'assieme usando GCC?] (Https://stackoverflow.com/q/2412816/608639) – jww