Hallo zusammen, angenommen, ich habe den Programmcode aus einem µC ausgelesen. Anschließend habe ich ihn disassembliert. Und weil das bei der Interpretation noch zu unübersichtlich war, habe ich ihn manuell in Pseudo-C-Code decompiliert. Jetzt möchte ich gerne diesen Pseudo-C-Code per GNU debuggen. Das Problem ist, dass ich ihn natürlich nicht mit GCC bauen kann, da es ja nur Pseudo-C-Code ist. Wenn ich das aber nicht kann, gibt es auch keine Symboldatei (elf), die ich in GDB laden kann. Mein erster Lösungsansatz: Ich schreibe den disassemblierten Code in eine C-Datei und füge den Pseudo-C-Code als Kommentar hinzu. Das Ganze lasse ich mit GCC bauen (sollte binärkompatibel zum Original sein, oder?) und lade es dann in GDB. So kann ich in GDB den Pseudo-C-Code als Kommentar sehen. Leider kann ich mit dem Ansatz kein Watch machen (bzw. nur auf Assembler-Ebene) und außerdem steppe ich natürlich immer durchs Assembly (und nicht gleich zum nächsten C-Befehl). Gibt es noch andere Möglichkeiten? Ist es möglich, aus meinem Pseudo-C-Code eine Pseudo-ELF-Datei zu erstellen? Gibt es dafür einen Editor? Grüße Steffen
Steffen Hausinger schrieb: > sollte binärkompatibel zum Original sein, oder? Warum? Es gibt nicht nur unterschiedliche Compilersettings, sondern auch unterschliedliche Compilerversionen...
Toni Tester schrieb: > Warum? > Es gibt nicht nur unterschiedliche Compilersettings, sondern auch > unterschliedliche Compilerversionen... Ich gehe davon aus, dass der Compiler selbst gar nicht aktiv wird, wenn er bereits mit Assemblercode gefüttert wird.
Steffen Hausinger schrieb: > Ich schreibe den disassemblierten Code in eine C-Datei und füge den > Pseudo-C-Code als Kommentar hinzu. Der disassemblierte Code gehört in eine Assembler-Datei (die nach dem Assemblieren den selben Maschinencode ergeben sollte).
Steffen Hausinger schrieb: > Gibt es noch andere Möglichkeiten? Ist es möglich, aus meinem > Pseudo-C-Code eine Pseudo-ELF-Datei zu erstellen? Wenn du einen Compiler für dein Pseudo-C schreibst. Mir ist der Sinn nicht so ganz klar. Wenn du nur Assembler hast, kannst du auch nur richtig auf Assembler-Ebene Debuggen. Was soll es denn bringen, von Hand irgendeinen Pseudocode zu schreiben, der dem theoretisch entsprechen sollte und diesen dann zu debuggen? > Gibt es dafür einen Editor? Wofür? Für Pseudocode?
Der disassemblierte, unverarbeitete Code ist sehr komplex. Deshalb habe ich ihn abstrahiert und dadurch vereinfacht. Beispiel:
1 | lea RAM_abc,r0 |
2 | add r1,r0 |
3 | mov (r0),r1 |
4 | cmp #0,r1 |
5 | beq loc_xy |
6 | sub #1,r1 |
7 | mov r1,(r0) |
8 | xy: ... |
wird einfach zu
1 | if(RAM_abc[r1] > 0) |
2 | RAM_abc[r1]--; |
Das Ergebnis ist für meinen Geschmack deutlich übersichtlicher. Das Verstehen fällt mir leichter. Rolf Magnus schrieb: >> Gibt es dafür einen Editor? > > Wofür? Für Pseudocode? Für elf Dateien. Ich möchte meinen Assembly-Code mit meinem Pseudo-C-Code anreichern. Ziel ist es, mit GDB durch den Pseudo-C-Code zu steppen, obwohl GDB in Wirklichkeit nur das Assembly ausführt.
Nachtrag: Ähnlich wie in der Darstellung "Mixed Source+Assembly". Dort wird, nach meinem Verständnis, auch das Assembly als Basis genommen und der C-Code stellt nur die Basis für das Steppen dar.
Ist niemand hier, der sich mit DWARF oder stabs auskennt und mir weiterhelfen kann?
Steffen Hausinger schrieb: > Hallo zusammen, > > angenommen, ich habe den Programmcode aus einem µC ausgelesen. > Anschließend habe ich ihn disassembliert. Und weil das bei der > Interpretation noch zu unübersichtlich war, habe ich ihn manuell in > Pseudo-C-Code decompiliert. > > Jetzt möchte ich gerne diesen Pseudo-C-Code per GNU debuggen. GDB ist ein guter Debugger aber leider nicht für Reverse Engineering gemacht. Für ernsthaftes Reverse Engineering mit Debugging nimmt man IDA Pro https://www.hex-rays.com/products/ida/index.shtml Kostet allerdings so um die 1000 Euro.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.