如何使用GDB检查堆栈帧?
现在我一直在使用GDB来反汇编二进制文件,并检查不同的寄存器等等。是否有一个简单的命令来检查堆栈上的所有内容?这是否可以限制为函数中的所有内容?对于当前堆栈帧:如何使用GDB检查堆栈帧?,gdb,stack,Gdb,Stack,现在我一直在使用GDB来反汇编二进制文件,并检查不同的寄存器等等。是否有一个简单的命令来检查堆栈上的所有内容?这是否可以限制为函数中的所有内容?对于当前堆栈帧: 信息框架列出了框架的一般信息(内存中的起始位置等) info args列出函数的参数 info locals列出存储在框架中的局部变量 bt(或backtrace)将为您提供一个调用堆栈 frame将在调用堆栈上选择一个帧进行检查 info frame将为您提供有关堆栈中特定帧的信息。在没有参数的情况下调用时,它将显示当前选定的帧
- 信息框架列出了框架的一般信息(内存中的起始位置等)
- info args列出函数的参数
- info locals列出存储在框架中的局部变量
(或bt
)将为您提供一个调用堆栈backtrace
将在调用堆栈上选择一个帧进行检查frame
将为您提供有关堆栈中特定帧的信息。在没有参数的情况下调用时,它将显示当前选定的帧info frame
可以为您提供有关堆栈上任何局部变量的信息info locals
- 只需尝试
,您将获得所有帧和局部帧bt full
- 输入
,以输入x帧帧x
- 您可以使用
x/10x$sp
这将打印堆栈的前10个元素。,这将帮助您了解框架的使用方式。这将对您有所帮助:。您可以随时使用“frame”命令在帧之间跳转。这是什么版本的GDB?我无法让gdb将寄存器用作gdb 7.7-0ubuntu3.1上的命令参数。这个答案告诉您如何实际查看堆栈帧上的字节,我在找到如何操作时遇到了一些困难。谢谢但这将打印由
$sp
指向的元素及其后的9个元素,即(如果堆栈向下扩展,例如在x86中)程序尚未实际使用的9个元素。对吗?@cYrus$sp指向堆栈的顶部,即较低的地址。您可能会想到$bp,它存储堆栈的底部地址。frame也会选择一个帧<代码>信息框架用于检查框架,无需选择itHello,欢迎使用SO!请阅读,例如,添加一个指向什么是进程地址空间的链接,并详细说明它如何帮助解决此问题可能会有所帮助。如果我有一个变量也称为frame,该怎么办?@Jeokerinfo frame
总是会告诉您有关该框架的信息。如果需要有关变量的信息,则必须使用其他子命令,如info locals
,或完全使用其他命令,如print