How can one see content of stack with GDB?

CAssemblyGdb

C Problem Overview


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

C Solutions


Solution 1 - C

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.

Solution 2 - C

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

Solution 3 - C

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.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
Questionuser478571View Question on Stackoverflow
Solution 1 - CDipSwitchView Answer on Stackoverflow
Solution 2 - CgaoitheView Answer on Stackoverflow
Solution 3 - CunwindView Answer on Stackoverflow