2010-03-24 14 views
13

In modernen Linux sind fast alle Objekte in zwei Teile (zwei Dateien) abgestreift und aufgeteilt. Die erste ist selbst ausführbar und die zweite ist Debug-Symbole, die aus der ursprünglichen ELF entfernt sind. Solche Dateien werden mitWie man den Streifen des objcopy mit nur-keep-debug umkehrt?

erstellt
objcopy --only-keep-debug original.elf binary.dbg 
mv original.elf binary 
objcopy --strip-debug binary 

Wie kann ich binary und binary.dbg in ELF-Datei zusammenführen info mit dem Debuggen? Ich möchte unausgeschnittene, ursprüngliche Binärdateien wiederherstellen. Es kann nicht Byte-zu-Byte gleich dem Original sein, aber es muss Debug-Symbole enthalten.

PS Ja, ich weiß über gnu.debuglink Abschnitt, aber es funktioniert nicht für einige Debugger (etnus) und Disassembler (objdump können keine Symbole Info wiederherstellen)

Antwort

5

Für ELF, das elfutils Paket enthält ein Tool namens eu-unstrip das macht den Job. Im Zusammenhang mit Ihrem Beispiel:

eu-unstrip binary binary.dbg

binary.dbg nun sowohl die binären und Debug-Symbole. Ich würde einen Verweis auf die Dokumentation hinzufügen, wenn ich einen finden könnte ...

+0

Es gibt das Dokument: http://www.linuxfromscratch.org/blfs/view/svn/general/elfutils.html "*' eu unstrip "kombiniert stripped Dateien mit separaten Symbolen und Debug-Informationen. *" und das ist die Homepage https://fedorahosted.org/elfutils/ und das ist die Quelle https://git.fedorahosted.org/cgit/elfutils.git/tree/ src/unstrip.c "Kombinieren Sie entkernte Dateien mit separaten Symbolen und Debug-Informationen. Copyright (C) 2007-2012, 2014, 2015 Red Hat, Inc ... Roland McGrath". Wenn ich "program.bin" als normales ELF und "program.dbg" nur mit Debug-Informationen habe, wie soll ich 'eu-unstrip' starten und welche Datei wird geändert? – osgx

+3

Basierend auf meiner Verwendung, führt es die Binärdatei in die Debug-Symbole zusammen. Wenn Sie program.dbg und program.bin haben, dann fügt 'eu-unstrip program.bin program.dbg' das Bin in die dbg-Datei ein. Das Umkehren der Parameter führt zu Fehlern. – lyngvi

+0

Ich habe keinen Zugriff auf Elfutils, sondern nur auf Binutils. Ist es möglich mit objcopy --add-section o.ä. – sunil