我是gdb的新手,所以我有一些问题;
如何查看堆栈内容?
例如:要查看注册内容,我输入info registers
。对于堆栈应该
如何查看$0x4(%esp)
的内容?当我输入print /d $0x4(%esp)
时,gdb会出错。
平台:linux GDB
答案 0 :(得分:86)
info frame
显示堆栈帧信息
要读取给定地址的内存,您应该查看x
x/x $esp
表示已为无符号等签名x/d $esp
的十六进制x/u $esp
.x使用格式语法,您还可以通过x/i $eip
等查看当前指令。
答案 1 :(得分:52)
使用:
bt
- 回溯:显示堆栈函数和args info frame
- 显示堆栈开始/结束/ args / locals指针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
)。报价略有转述。