如何使用GDB检查堆栈帧?

Get*_*awn 62 stack gdb

现在我一直在使用GDB来反汇编二进制文件并检查不同的寄存器和诸如此类的东西.是否有一个简单的命令来检查堆栈中的所有内容?这可以局限于函数中的所有内容吗?

Flo*_*low 81

您可以使用查看堆栈的内容 x/10x $sp

这将打印堆栈的前10个元素.


Mic*_*zek 68

对于当前堆栈帧:

  • 信息框列出了关于框架的一般信息(事物从内存开始等)
  • info args列出函数的参数
  • info locals列出存储在框架中的局部变量


dla*_*nod 45

  • bt(或backtrace)会给你一个调用堆栈.

  • frame <args> 将为您提供有关堆栈中特定帧的信息.

  • info locals 可以为您提供有关堆栈中任何局部变量的信息.

  • frame &lt;args&gt; 也选择一个框架。`info frame &lt;addr&gt;` 用于检查框架而不选择它 (2认同)

kdb*_*oot 9

  • 只要尝试一下bt full,你就会得到所有框架和局部变量
  • 输入frame x, 进入x坐标系

顺便说一下,你应该了解进程地址空间及其组成: linux虚拟地址空间,这将帮助你理解帧是如何使用的。