18. Januar 2020, 14:52

GDB

Im Folgenden sind meine Notizen, die ich mir während der Protostar Stack0 Übung gemacht habe und auch durch das Binary Analysis Tutorial von Max Kersten und dem Video von LiveOverflow ergänzt wurden.

Datei mit dem Debugger gdb öffnen:

$ gdb ./stack0

Auflisten aller Funktionen:

(gdb) info functions

Eine Funktion disassemblieren:

# die aktuelle Funktion disassemblieren
(gdb) disassemble
# Kurzform geht auch
(gdb) disass
# eine bestimmte Funktion disassemblieren
(gdb) disassemble main

Intel Syntax verwenden:

(gdb) set disassembly-flavor intel

Einen Breakpoint setzen:

# Breakpoint bei einer Funktion setzen, z.B. "main"
(gdb) break *main
# Breakpoint bei Adresse setzen
(gdb) break *0x08048411

Programm von Beginn an starten:

(gdb) run
(gdb) r

Programmausführung fortsetzen:

(gdb) continue
(gdb) c

Zeige die Speicherbereiche (z.B. des Stacks) des laufenden Prozesses (da es sich hier um einen Prozess handelt, bedeutet das auch: das Programm muss gerade ausgeführt werden):

(gdb) info proc mappings

Gesetzte Breakpoints auflisten:

(gdb) info break

Breakpoints entfernen:

# Alle Breakpoints entfernen
(gdb) delete breakpoints
# Kurzform für alle Breakpoints entfernen
(gdb) delete
# noch kürzer geht auch
(gdb) del
# Breakpoint mit Nummer 1 entfernen (siehe "info break" Befehl oben)
(gdb) delete 1

Set von Befehlen ausführen, sobald ein Breakpoint erreicht wird:

(gdb) define hook-stop
# Befehle und dann am Schluss "end" eingeben

Informationen über Register anzeigen:

(gdb) info registers

Speicheradresse untersuchen:

# Zeige 24 Word-große Elemente vom Stack in hex an
(gdb) x/24x $esp
# Zusätzliche Angabe der Element-Größe ("w" ist Standard):
(gdb) x/24wx $esp
# Anzeige der nächsten 5 Instruktionen
(gdb) x/5i $eip
# Ausgabe des Inhalts von einer Adresse als String:
(gdb) x/s 0x8048500
# Offsets sind auch möglich:
(gdb) x/x $esp+0x5c

Python für den Überlauf benutzen (4+16*3+14 ergibt sich aus dem Füllen der Stack-“Zeilen”):

$ python -c 'print "A"*(4+16*3+14)' | ./stack0

© Pavel Pi 2020

Powered by Hugo & Kiss'Em.