2008-11-26 9 views
14

Wie verwende ich GDB, um ein Programm zu debuggen, das keine Debugging-Symbole auf einem 32-Bit-x86-Prozessor hat? Die Überprüfung der Funktionsargumente, lokalen Variablen, Auflösen von Zeigern wäre nützlich, um zu wissen, wie man vorgeht. Die Absicht ist nicht wirklich, dies für das Reverse Engineering zu verwenden, da ich manchmal einfach zu faul bin, die Debugging-Symbole zu installieren und es wäre toll zu wissen, wie man einige grundlegende Informationen aus gdb herausholt.Verwenden von GDB ohne debugging Symbole auf x86?

Antwort

6

Ohne Debugging-Symbole können Sie nur auf ASM-Ebene debuggen. Ok, du bekommst ein Bit mehr Informationen, aber du wirst nicht sehr weit kommen, wenn du nicht ein bisschen ASM und den Code, den der Compiler generiert, verstehst. Dies ermöglicht Ihnen eine einfache Überprüfung der lokalen Variablen usw. Wenn Sie wissen, was Sie tun.

Wenn Sie die Quelle haben, wird es viel einfacher sein, es einfach neu zu kompilieren.

+0

+1 aktiviert ist, GDB auf einem binären ohne Symbolen kompiliert (oder sogar eine ausreichend optimiert binär) funktioniert am besten als Montageebene Debugger - eine Aufgabe, bei der es einigermaßen kompetent ist. – Falaina

1

Alles, was Sie tun können, ist Register und den Inhalt des Stapels zu sehen - Sie müssen alles tun, indem Sie ableiten, wofür Dinge verwendet werden, wie Draemon erwähnt.

20

Um anzufangen, können Sie tun;

gdb "whatever" 
break __libc_start_main 
r 

das wird Setup einen Haltepunkt in crt0 Code des libc und ermöglicht es Ihnen, bevor Haupt zu brechen, auch wenn das Ziel binären vollständig abgezogen wird.

Das bringt Sie zu einem laufenden Zustand an einem Haltepunkt vor den meisten Benutzercode. Sie können dann einzelne Schritte, Disassemblings, Speicherausfälle usw. nach Herzenslust durchführen.

Das funktioniert auf allen Plattformen, die Tatsache, dass Sie nach IA-32/x86 fragen, spielt keine Rolle.

+0

sehr schön. Wäre cool zu erwähnen, dass "disassemble" ein gdb-Befehl ist, der ASM ablegt. Jetzt können Sie den ASM-Code lesen (oder in meinem Fall sehen)! Yay! – Lotus

+1

[Hier ist ein nettes Tutorial] (http://felix.abecassis.me/2012/08/gdb-debugging-stripped-binaries/) zum Debuggen von entfernten Binärdateien mit GDB. –

0

Nun, das Wichtigste ist, dass Sie den Stapel abwickeln können. Es gibt drei Möglichkeiten, dies gewährleistet werden kann:

  • Build-Debug-Symbole mit -g

  • Auf Systemen, die C tun ++ Ausnahme Abrollen über Tabellen (? Wahrscheinlich etwas ELF in diesen Tagen), die -funwind-tables Flagge wird es sagen um solche Tabellen unabhängig von der Sprache zu erzeugen, und GDB kann diese Tabellen verwenden (zumindest mit x86 Linux kann es).

  • Oder jene Fehler, zumindest sicherstellen, dass nicht