How can one see content of stack with GDB? How can one see content of stack with GDB? c c

How can one see content of stack with GDB?


info frame to show the stack frame info

To read the memory at given addresses you should take a look at x

x/x $esp for hex x/d $esp for signed x/u $esp for unsigned etc. x uses the format syntax, you could also take a look at the current instruction via x/i $eip etc.


Use:

  • bt - backtrace: show stack functions and args
  • info frame - show stack start/end/args/locals pointers
  • x/100x $sp - show stack memory
(gdb) bt#0  zzz () at zzz.c:96#1  0xf7d39cba in yyy (arg=arg@entry=0x0) at yyy.c:542#2  0xf7d3a4f6 in yyyinit () at yyy.c:590#3  0x0804ac0c in gnninit () at gnn.c:374#4  main (argc=1, argv=0xffffd5e4) at gnn.c:389(gdb) info frameStack level 0, frame at 0xffeac770: eip = 0x8049047 in main (goo.c:291); saved eip 0xf7f1fea1 source language c. Arglist at 0xffeac768, args: argc=1, argv=0xffffd5e4 Locals at 0xffeac768, Previous frame's sp is 0xffeac770 Saved registers:  ebx at 0xffeac75c, ebp at 0xffeac768, esi at 0xffeac760, edi at 0xffeac764, eip at 0xffeac76c(gdb) x/10x $sp0xffeac63c: 0xf7d39cba  0xf7d3c0d8  0xf7d3c21b  0x000000010xffeac64c: 0xf78d133f  0xffeac6f4  0xf7a14450  0xffeac6780xffeac65c: 0x00000000  0xf7d3790e


You need to use gdb's memory-display commands. The basic one is x, for examine. There's an example on the linked-to page that uses

gdb> x/4xw $sp

to print "four words (w ) of memory above the stack pointer (here, $sp) in hexadecimal (x)". The quotation is slightly paraphrased.