140

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

Peter Mortensen
  • 30,738
  • 21
  • 105
  • 131
  • 1
    possible duplicate of [Using GDB to inspect the Machine Stack](http://stackoverflow.com/questions/4019508/using-gdb-to-inspect-the-machine-stack) – Employed Russian Oct 21 '11 at 15:04

3 Answers3

155

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.

DipSwitch
  • 5,470
  • 2
  • 20
  • 24
115

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
Bat
  • 771
  • 11
  • 29
gaoithe
  • 4,218
  • 3
  • 30
  • 38
68

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.

dana
  • 17,267
  • 6
  • 64
  • 88
unwind
  • 391,730
  • 64
  • 469
  • 606