Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何使用GDB查看堆栈的内容?_C_Assembly_Gdb - Fatal编程技术网

C 如何使用GDB查看堆栈的内容?

C 如何使用GDB查看堆栈的内容?,c,assembly,gdb,C,Assembly,Gdb,我是GDB的新手,所以我有一些问题: 如何查看堆栈的内容? 示例:要查看寄存器的内容,请键入info registers。对于堆栈,它应该是什么 如何查看$0x4%esp的内容?当我键入print/d$0x4%esp时,GDB给出一个错误 平台:Linux和GDB您需要使用GDB的内存显示命令。最基本的是。“链接到”页面上有一个使用 gdb> x/4xw $sp 要在堆栈指针上方打印四个单词w,请在此处使用十六进制x打印$sp。引文稍作解释。info frame以显示堆栈帧信息 要读取给

我是GDB的新手,所以我有一些问题:

如何查看堆栈的内容? 示例:要查看寄存器的内容,请键入info registers。对于堆栈,它应该是什么

如何查看$0x4%esp的内容?当我键入print/d$0x4%esp时,GDB给出一个错误


平台:Linux和GDB

您需要使用GDB的内存显示命令。最基本的是。“链接到”页面上有一个使用

gdb> x/4xw $sp
要在堆栈指针上方打印四个单词w,请在此处使用十六进制x打印$sp。引文稍作解释。

info frame以显示堆栈帧信息

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

x/x$esp用于十六进制x/d$esp用于有符号x/u$esp用于无符号等。x使用格式语法,您还可以通过x/i$eip等查看当前指令。

使用:

bt-backtrace:显示堆栈函数和参数 信息框架-显示堆栈开始/结束/参数/局部指针 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