2010-03-24 12 views
20

Gibt es einen Verweis auf die Quelldatei in der Binärdatei? Ich habe versucht, Strings auf der Binärdatei ausgeführt und konnte keinen Verweis auf die Quelldatei finden Sie aufgelistetWie verwaltet objdump den Quellcode mit der Option -S?

+0

Gute Frage, schlechte Antworten (bisher). Siehe auch [Wie erhalte ich die Quellzeilen mit der Assembly-Ausgabe über GCC inline?] (Https://stackoverflow.com/q/2412816/608639) – jww

Antwort

23

objdump verwendet die DWARF-Debuginformationen kompiliert in die Binärdatei, die den Quelldateinamen verweist. Wenn die Binärdatei nicht mit Debuginformationen kompiliert wird oder objdump die Quelldatei nicht finden kann, erhalten Sie keinen Quellcode in der Nur-Ausgabe-Assembly.

Der Quelldateiname wird nicht angezeigt, wenn Sie strings für die Binärdatei verwenden, da DWARF Komprimierung verwendet.

+0

Wollen Sie sagen, dass wir kompilieren mit Zwerg Debugging aktiviert haben und dann verwenden ' objdump' (mit einigen unbekannten Optionen), um die mit der Disassembly verschachtelte Quelle anzuzeigen? Könnten Sie die tatsächlichen Schritte mit den eigentlichen Befehlen versehen? – jww

+1

@jww: Die Option '-g' für' gcc' aktiviert Debugging-Informationen, und die '-S' -Option ermöglicht es, dissambles mit Source interleaved zu überlagern. Aber die Frage war nicht, wie man das macht; der Fragesteller wusste das bereits, sie fragten stattdessen, wie dies implementiert wird (wie 'objdump' die Quelle findet, die verschachtelt werden soll). – caf

8

Die Zwergeninformation in einer Binärdatei speichert die Zuordnung zwischen Anweisungen (der Befehlszeiger oder IP tatsächlich) und der Quelldatei und Zeilennummer. Die Quelldatei wird mit dem vollständigen Pfad angegeben, sodass sie auch dann gefunden werden kann, wenn die Binärdatei verschoben wird. Um diese Informationen zu sehen, können Sie objdump --dwarf=decodedline <binary> verwenden (die Binärdatei muss natürlich mit -g kompiliert werden).

Sobald Sie objdump -S <binary> sagen, verwenden Sie diese Zwergeninfo, um Ihnen Quellcode zusammen mit der Demontage zu geben.

+0

Vielleicht sollten Sie ein Live-Beispiel bereitstellen. Ich kann 'objdump' nicht erhalten, um sowohl die Disassemblierung mit den verschachtelten Quellcodezeilennummern zu liefern. – jww

3

Mein Verständnis ist, dass für objdump Quellcode aus dem Binärcode anzuzeigen, gibt es eine Voraussetzung: die DWARF-Debuginformationen müssen in die Binärdatei kompiliert werden. (Von gcc -g sourcefile oder gcc -gdwarf-2 sourcefile) Und durch die Verarbeitung dieser Informationen ZWERG objdump ist in der Lage, den Quellcode als @ vlcekmi3 zu bekommen und @vkrnt beantwortet

+0

Wollen Sie sagen, dass wir kompilieren müssen mit aktiviertem Zwergen-Debugging und dann 'objdump' (mit einigen unbekannten Optionen) verwenden, um die mit der Disassembly verschachtelte Quelle anzuzeigen? Könnten Sie die tatsächlichen Schritte mit den eigentlichen Befehlen versehen? – jww

Verwandte Themen