146

I am new to GDB, so I have some questions:

  • How can I look at content of the stack? Example: to see content of register, I type info registers. For the stack, what should it be?

  • How can I see the content of $0x4(%esp)? When I type print /d $0x4(%esp), GDB gives an error.

Platform: Linux and GDB

1

3 Answers 3

161

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.

Sign up to request clarification or add additional context in comments.

Comments

120

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 frame Stack 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 $sp 0xffeac63c: 0xf7d39cba 0xf7d3c0d8 0xf7d3c21b 0x00000001 0xffeac64c: 0xf78d133f 0xffeac6f4 0xf7a14450 0xffeac678 0xffeac65c: 0x00000000 0xf7d3790e 

1 Comment

for 64 bit values use xg like x/10xg $sp
71

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.

Comments