Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.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
如何使用GDB检查堆栈帧?_Gdb_Stack - Fatal编程技术网

如何使用GDB检查堆栈帧?

如何使用GDB检查堆栈帧?,gdb,stack,Gdb,Stack,现在我一直在使用GDB来反汇编二进制文件,并检查不同的寄存器等等。是否有一个简单的命令来检查堆栈上的所有内容?这是否可以限制为函数中的所有内容?对于当前堆栈帧: 信息框架列出了框架的一般信息(内存中的起始位置等) info args列出函数的参数 info locals列出存储在框架中的局部变量 bt(或backtrace)将为您提供一个调用堆栈 frame将在调用堆栈上选择一个帧进行检查 info frame将为您提供有关堆栈中特定帧的信息。在没有参数的情况下调用时,它将显示当前选定的帧

现在我一直在使用GDB来反汇编二进制文件,并检查不同的寄存器等等。是否有一个简单的命令来检查堆栈上的所有内容?这是否可以限制为函数中的所有内容?

对于当前堆栈帧:

  • 信息框架列出了框架的一般信息(内存中的起始位置等)
  • info args列出函数的参数
  • info locals列出存储在框架中的局部变量
      • bt
        (或
        backtrace
        )将为您提供一个调用堆栈

      • frame
        将在调用堆栈上选择一个帧进行检查

      • info frame
        将为您提供有关堆栈中特定帧的信息。在没有参数的情况下调用时,它将显示当前选定的帧

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


        • 您可以使用
          x/10x$sp

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

          • 只需尝试
            bt full
            ,您将获得所有帧和局部帧
          • 输入
            帧x
            ,以输入x帧
          顺便说一下,您应该了解进程地址空间及其组成:
          ,这将帮助您了解框架的使用方式。

          这将对您有所帮助:。您可以随时使用“frame”命令在帧之间跳转。这是什么版本的GDB?我无法让gdb将寄存器用作gdb 7.7-0ubuntu3.1上的命令参数。这个答案告诉您如何实际查看堆栈帧上的字节,我在找到如何操作时遇到了一些困难。谢谢但这将打印由
          $sp
          指向的元素及其后的9个元素,即(如果堆栈向下扩展,例如在x86中)程序尚未实际使用的9个元素。对吗?@cYrus$sp指向堆栈的顶部,即较低的地址。您可能会想到$bp,它存储堆栈的底部地址。frame也会选择一个帧<代码>信息框架用于检查框架,无需选择itHello,欢迎使用SO!请阅读,例如,添加一个指向什么是进程地址空间的链接,并详细说明它如何帮助解决此问题可能会有所帮助。如果我有一个变量也称为frame,该怎么办?@Jeoker
          info frame
          总是会告诉您有关该框架的信息。如果需要有关变量的信息,则必须使用其他子命令,如
          info locals
          ,或完全使用其他命令,如
          print