Raw Binary mit GDB debuggen?

Gast #4749140
Lesenswert?

Hallo zusammen,

wenn ich mit GDB debuggen möchte, sieht das übliche Vorgehen wohl so 
aus, dass man mit GCC seinen Quellcode compiliert und die dabei gebaute 
ELF-Datei in GDB lädt.

Für mein Vorhaben muss der Weg jedoch umgekehrt sein: Ich habe lediglich 
einen Memory Dump (Binärdaten) von einem MC68k System. Dieses möchte ich 
reverse engineeren und um es besser zu verstehen, mit GDB durch den 
Assemblercode steppen.

Mein erster Ansatz war, GDB direkt mit den Binärdaten zu füttern. Jedoch 
habe ich keinen Hinweis gefunden, dass das funktioniert. Dann habe ich 
versucht, per "objdump -b binary -D <filename.bin>" ein Disassembly zu 
erzeugen, um das dann zu debuggen. Leider bekomme ich die Fehlermeldung 
"architecture unknown". Wenn ich "--target=elf32-M68k" eingebe, erhalte 
ich "File format not recognized"...

Ich möchte doch nur die Binärdaten debuggen! Mit IDA Pro bspw. kann ich 
sie wunderbar disassemblieren. Aber eben nicht debuggen. Das muss doch 
mit GNU irgendwie gehen? Was mache ich falsch, wie mache ich es richtig?

Grüße
Steffen

P.s.: Ich verwende diese Toolchain: http://gnutoolchains.com/m68k-elf/ 
in einer Windows-Umgebung.
#4749339
Lesenswert?

m68k-elf-objdump -D -b binary --architecture m68k:68000 <raw binary>

(oder eben ein anderer, unterstützter Prozessor der M68K-Familie)

müsste dir ein brauchbares Disassembly liefern. Allerdings ist da noch 
etwas Arbeit und Hirnschmalz reinzustecken. Das raw binary hat keine 
Section-Informationen mehr und der Disassembler kann zwischen Code und 
Daten nicht unterscheiden.

Für gdb brauchst Du irgendeine Verbindung zum Targetsystem. Entweder 
läuft gdb direkt dort drauf oder es gibt irgendeine Art von 
Remote-Kommunikation (gdbserver seriell oder z.B. BDM).
Gast #4749342
Lesenswert?

Meine CPU ist über ein Interface am Parallelport angeschlossen. Mit 
einem anderen Tool (BD32) kann ich damit, recht unkomfortabel, debuggen.

Der GDB, den ich mir heruntergeladen habe, ist für den M68k gebaut. Das 
ist also schon die richtige Architektur.

Danke für den Link, ich kannte ihn noch nicht. Aber selbst wenn ich 
meinen Header manuell entferne, klappt es mit GDB nicht.


Gibt es irgendwo ein funktionierendes Beispiel, wo jemand ein Binary mit 
GDB debuggt? Ich finde immer nur solche, wo jemand einen beispielhaften 
C-Code schreibt und dann erklärt, mit welchen Parametern man GCC 
aufruft, damit man komfortabel mit Symbolen debuggen kann... Genau das 
brauche ich aber nicht.
Gast #4749538
Lesenswert?

Du brauchst gar kein Disassembly und auch kein Image. Disassemblieren 
kann jeder Debugger selber.

Einfach mit dem Target connecten, PC setzen und Single-steppen.

Es gibt auch ein vernünftiges GDB Manual, das Du nützlicherweise mal 
studieren solltest.
Gast #4750603
Lesenswert?

Markus F. schrieb:
> m68k-elf-objdump -D -b binary --architecture m68k:68000 <raw
> binary>
>

Das klappt wunderbar! Vielen Dank! (Zu meiner Schande muss ich 
eingestehen, dass die möglichen Architekturen nach Aufruf von "objdump 
--help" ja aufgeführt werden - das hatte ich gestern komplett 
übersehen.)


Der nächste Schritt wäre jetzt, dieses Disassembly in GDB zu laden. Als 
ich gestern das Binary laden wollte, sagte er mir "not in executable 
format", was ich verstehen konnte. Aber wenn ich jetzt das Disassembly 
lade, sagt er mir das Gleiche!?


Markus F. schrieb:
> Allerdings ist da noch etwas Arbeit und Hirnschmalz reinzustecken. Das
> raw binary hat keine Section-Informationen mehr und der Disassembler
> kann zwischen Code und Daten nicht unterscheiden.

Ich schätze mal, das hier ist der benötigte Trick, oder? Oder bin ich 
mit dem Disassembly auf dem Holzweg?

Wie erzeuge ich denn eine Datei, die ich mit gdb laden kann? GDB 
erwartet eine ELF Datei, oder? Dann muss ich vielleicht doch "objcopy" 
verwenden, so wie im Link von Beitrag von klausr? Damit bekomme ich eine 
Datei, die GDB ohne Fehlermeldung schluckt. Der Befehl "x/i <address>" 
klappt auch.


Und den BDM Treiber (Prozessor ist eine CPU32) muss ich ja auch noch 
irgendwie laden. Puh, ich stehe gerade wie ein Ochs vorm Berg.
Gast #4750608
Lesenswert?

Nachtrag: Die Readme in den "BDM Tools" beziehen sich immer auf Linux. 
Das macht es für mich als Klicki-Bunti Windows Benutzer auch nicht 
unbedingt einfacher. Ist das Ganze überhaupt unter Windows lauffähig?
#4750757
Lesenswert?

Steffen Hausinger schrieb:
> Der nächste Schritt wäre jetzt, dieses Disassembly in GDB zu laden. Als
> ich gestern das Binary laden wollte, sagte er mir "not in executable
> format", was ich verstehen konnte. Aber wenn ich jetzt das Disassembly
> lade, sagt er mir das Gleiche!?

Du kannst kein Disassembly in gdb laden. gdb ist ein Debugger, kein 
Assembler (und schon gar kein Simu-/Emulator).

Um mit gdb etwas Sinnvolles anzustellen, brauchst Du dein Binary auf dem 
Target und eine Verbindung dazu. Wenn das funktioniert, kannst Du gdb 
das Binary auf dem Target im Einzelschrittmodus ausführen lassen und 
dazwischen die Register- und Memoryinhalte auslesen. Genau das machen 
die oben verlinkten bdm-tools für den m68k (ob man die z.B. mit cygwin 
auf Windows zum Laufen bringen kann, weiß ich nicht).

Möglicherweise brauchst Du das aber gar nicht. Es gibt kaum einfacher zu 
verstehenden Assemblercode als den der m68k-Familie. Setz' dich mit 
Papier und Bleistift vor dein Disassembly und mach' "Debugging zu Fuß".

So hat man das früher auch gemacht. Mit genug Übung brauchst Du gar 
keinen Disassembler mehr.

Was soll überhaupt das Ziel der ganzen Aktion sein?
#4751283
Lesenswert?

Mw E. schrieb:
> Beim GDB kann man doch auch als target nen eingebauten Simulator nehmen
> "target sim"
>
... wenn man auf einer Plattform sitzt, die so was unterstützt. CPU32 
gehört da nach meiner Kenntnis nicht dazu.

> Ansonsten das Binary mal in einen QEMU oder sonstigen Simulator
> reinladen und dann per GDB drauf zugreifen?

... einen QEMU für CPU32 zu finden dürfte auch nicht ganz einfach sein.
Gast #4752924
Lesenswert?

Ich bin seit gestern Abend dabei, die BDM Tools bei mir zum Laufen zu 
bringen. Bisher noch erfolglos. Ich wollte Euch trotzdem Rückmeldung 
geben und mich natürlich für Euren Rat bedanken!


Tsca k schrieb:
> Ja. Hab' ich Dir gestern schon gesagt. Liest Du auch die Antworten?

Natürlich tue ich das. Du hast beispielsweise geschrieben: "Einfach mit 
dem Target connecten, PC setzen und Single-steppen." Genau das ist aber 
Quatsch. "Einfach" ist es für Leute, die sich auskennen oder bei denen 
eines der zahlreichen Tutorials passt. Das ist bei mir nicht so. Diese 
Antwort war daher, genau wie Deine letzte leider auch, überhaupt nicht 
hilfreich und ich habe sie dementsprechend beachtet.


Markus F. schrieb:
> Was soll überhaupt das Ziel der ganzen Aktion sein?

Ich möchte den Code verstehen und später anpassen. Kein debugging. Ich 
habe ~100 kB Programmcode, die ich (in monatelanger Handarbeit) in 
Pseudo-C decompiliert habe. Jetzt bin ich bei der Interpretation. Bis 
zur der Treiberschicht bin ich auch gut voran gekommen. Jetzt wird es 
aber so komplex, dass ich einfach nicht mehr weiterkomme. Ich finde 
einfach keinen Bezugspunkt mehr, ab dem ich mich weiterhangeln kann.
Gast #4753062
Lesenswert?

>Natürlich tue ich das. Du hast beispielsweise geschrieben: "Einfach mit
>dem Target connecten, PC setzen und Single-steppen." Genau das ist aber
>Quatsch. "Einfach" ist es für Leute, die sich auskennen oder bei denen
>eines der zahlreichen Tutorials passt.

Wenn Du Schwierigkeiten hast, den GDB an das Target anzuschliessen, 
musst
Du das auch so beschreiben.
Das hat mit Deinem so unsinnigen wie verzweifelten Versuch aus einem 
Binary
ein debugbares Image zu erzeugen gar nix zu tun!
Der GDB braucht ein Image nur, um Zugriff auf den Sourcecode und die 
Symbole zu haben. Da Du aber keinen Sourcecode hast...

>Das ist bei mir nicht so. Diese
>Antwort war daher, genau wie Deine letzte leider auch, überhaupt nicht
>hilfreich und ich habe sie dementsprechend beachtet.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren