我是gdb的新手,所以我有一些问题;
我怎么看堆栈的内容?例如:看到注册的内容,我输入info registers.对于堆栈应该是什么
我怎么看内容 $0x4(%esp)?当我键入print /d $0x4(%esp)gdb给出错误.
平台:linux gdb
Dip*_*tch 101
info frame 显示堆栈帧信息
要读取给定地址的内存,您应该查看 x
x/x $esp对于无符号等x/d $esp签名的十六进制x/u $esp.x使用格式语法,您也可以查看当前指令x/i $eip等.
gao*_*the 61
使用:
bt- backtrace:显示堆栈函数和argsinfo 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
unw*_*ind 53
您需要使用gdb的memory-display命令.基本的是x,检查.链接页面上有一个使用的示例
gdb> x/4xw $sp
Run Code Online (Sandbox Code Playgroud)
以十六进制()" 打印" w堆栈指针(此处$sp)上方的"四个字()内存x".报价略有转述.