用gdb怎么看堆栈的内容?

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

  • 我怎么看待栈的内容? 例如:查看寄存器的内容,我键入info registers 。 对于堆栈应该是什么

  • 我如何看到$0x4(%esp) ? 当我inputprint /d $0x4(%esp) gdb给出错误。

平台:Linux的GDB

info frame显示堆栈框架信息

要在给定的地址阅读内存,你应该看看x

x/x $esp用于hexx/d $esp用于带符号的x/u $esp用于无符号等x使用格式语法,还可以通过x/i $eip等等来查看当前指令。

你需要使用gdb的memory-display命令。 基本的是x ,用于检查 。 在使用的链接页面上有一个示例

 gdb> x/4xw $sp 

以hex( x )“的forms在堆栈指针(这里是$sp )之上打印”四个单词( w )“。 这个引用略有解释。

使用:

bt – backtrace:显示堆栈函数和参数

2. info frame – 显示堆栈开始/结束/参数/本地指针

3. x/100x $sp – 显示堆栈内存

    
 (gdb)bt
 #0在zzz.c上的zzz():96
 yyy.c中的#1 0xf7d39cba(arg = arg @ entry = 0x0)在yyy.c:542
 #2 0xf7d3a4f6在yyyinit()在yyy.c:590
 #3 0x0804ac0c在gnninit()在gnn.c:374
 #4 main(argc = 1,argv = 0xffffd5e4)at gnn.c:389

 (gdb)信息框架
堆栈0级,0xffeac770帧:
  eip = 0x8049047 in main(goo.c:291); 保存eip 0xf7f1fea1
 源语言c。
  arglist在0xffeac768,args:argc = 1,argv = 0xffffd5e4
  0xffeac768,上一帧的sp是0xffeac770
 保存的寄存器:
  在0xffeac75c的ebx,在0xffeac768的ebp,在0xffeac760的esi,在0xffeac764的edi,在0xffeac76c的eip

 (gdb)x / 10x $ sp
 0xffeac63c:0xf7d39cba 0xf7d3c0d8 0xf7d3c21b 0x00000001
 0xffeac64c:0xf78d133f 0xffeac6f4 0xf7a14450 0xffeac678
 0xffeac65c:0x00000000 0xf7d3790e