用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