如何用gdb看到堆栈的内容

时间:2011-10-21 11:31:13

标签: c assembly gdb

我是gdb的新手,所以我有一些问题;

  • 如何查看堆栈内容? 例如:要查看注册内容,我输入info registers。对于堆栈应该

  • 如何查看$0x4(%esp)的内容?当我输入print /d $0x4(%esp)时,gdb会出错。

平台:linux           GDB

3 个答案:

答案 0 :(得分:86)

info frame显示堆栈帧信息

要读取给定地址的内存,您应该查看x

x/x $esp表示已为无符号等签名x/d $esp的十六进制x/u $esp .x使用格式语法,您还可以通过x/i $eip等查看当前指令。

答案 1 :(得分:52)

使用:

1。 bt - 回溯:显示堆栈函数和args

2。 info frame - 显示堆栈开始/结束/ args / locals指针

3。 x/100x $sp - 显示堆栈内存

    
(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

答案 2 :(得分:49)

您需要使用gdb的memory-display命令。基本的是x, for examine。链接页面上有一个使用

的示例
gdb> x/4xw $sp

以十六进制(w)“打印”堆栈指针上方的“四个字($sp)”(此处为x)。报价略有转述。