Wie kann ich den Stack-Frame mit GDB untersuchen?


73

Im Moment habe ich GDB verwendet, um eine Binärdatei zu zerlegen und verschiedene Register und so weiter zu überprüfen. Gibt es einen einfachen Befehl, um alles auf dem Stapel zu untersuchen? Kann dies auf alles in einer Funktion beschränkt werden?


3
Dies sollte Ihnen hilfreich sein : cs.nyu.edu/courses/spring07/V22.0474-001/misc/gdb-refcard.pdf . Sie können jederzeit den Befehl "frame" verwenden, um zwischen den Frames zu springen.
Dicaprio

Antworten:


72

Für den aktuellen Stapelrahmen:

  • Info-Frame listet allgemeine Informationen zum Frame auf (wo Dinge im Speicher beginnen usw.)
  • info args listet Argumente für die Funktion auf
  • info local listet lokale Variablen auf, die im Frame gespeichert sind

91

Sie können den Inhalt des Stapels mit anzeigen x/10x $sp

Dadurch werden die obersten 10 Elemente des Stapels gedruckt.


Welche Version von GDB ist das? Ich kann gdb nicht dazu bringen, Register als Befehlsargumente für GDB 7.7-0ubuntu3.1
nightpool

Diese Antwort zeigt Ihnen, wie Sie die Bytes im Stapelrahmen tatsächlich betrachten. Ich hatte einige Probleme, herauszufinden, wie das geht. Vielen Dank!

Dadurch werden jedoch das Element $spund die 9 Elemente danach gedruckt , dh (wenn der Stapel wie beispielsweise in x86 nach unten wächst) 9 Elemente, die vom Programm noch nicht verwendet werden. Richtig?
cYrus

@cYrus $ sp zeigt auf den oberen Rand des Stapels, dh auf die untere Adresse. Sie denken wahrscheinlich an $ bp, in dem die unterste Adresse des Stapels gespeichert ist.
Raphael

56
  • bt(oder backtrace) gibt Ihnen einen Aufrufstapel.

  • frame <args> wählt einen Frame auf dem Aufrufstapel zur Überprüfung aus

  • info frame <args>gibt Ihnen Informationen zu einem bestimmten Frame aus dem Stapel. Beim Aufruf ohne Argumente wird der aktuell ausgewählte Frame angezeigt

  • info locals kann Ihnen Informationen über lokale Variablen auf dem Stapel geben.


2
frame <args> wählt auch einen Frame aus. info frame <addr>wird verwendet, um den Rahmen zu untersuchen, ohne ihn auszuwählen
rostamn739
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.