【问题标题】:What does the gdb 'x' command do?gdb 'x' 命令有什么作用?
【发布时间】:2012-08-07 01:58:18
【问题描述】:

为了进一步了解计算机,我偶然发现了一本书,其中有一些关于反汇编、x86 汇编语言以及 C 和 x86 汇编之间的关系的章节。现在我一直在阅读这个GDB 命令,但我无法完全理解它。

该命令及其结果如下:

(gdb) x/32xw $esp
0xbffff7e0:    0xb8000ce0 0x08048510 0xbffff848 0xb7eafebc
0xbffff7f0:    0x00000002 0xbffff874 0xbffff880 0xb8001898
0xbffff800:    0x00000000 0x00000001 0x00000001 0x00000000
0xbffff810:    0xb7fd6ff4 0xb8000ce0 0x00000000 0xbffff848
0xbffff820:    0x40f5f7f0 0x48e0fe81 0x00000000 0x00000000
0xbffff830:    0x00000000 0xb7ff9300 0xb7eafded 0xb8000ff4
0xbffff840:    0x00000002 0x08048350 0x00000000 0x08048371
0xbffff850:    0x08048474 0x00000002 0xbffff874 0x08048510

现在,据我了解,我发出的命令告诉调试器:

  • x(第一个):检查内存
  • 32:获得以下内容中的 32 个
  • x:启用十六进制表示
  • w:给我看Word 尺寸数据。
  • **Note:** 我知道我问的是 esp 寄存器,但我不太明白 $ 在它前面做什么。当我尝试不使用它时,我得到一个缺少符号的错误,所以我知道它与引用/取消引用有关?

困扰我的是我是如何找到所有这些字节的?由于我正在检查一个寄存器,谁的大小是 32 位,我不应该只得到 32 位或 4 个字节(上面只有 1 行)吗?如果我的假设是正确的,那么我们是否找到了其余数据?它是否必须与堆栈以及我目前不知道的特定堆栈框架有关?

非常感谢您的意见,以便我澄清我的想法。

【问题讨论】:

    标签: memory assembly gdb cpu-registers


    【解决方案1】:

    它为您提供了 32 个字的内存,esp 寄存器指向的位置(显然该寄存器包含地址 0xbffff7e0)。

    【讨论】:

      【解决方案2】:
      (gdb) help x   
      Examine memory: x/FMT ADDRESS.
      

      将 $esp 作为地址将使 gdb 获取该寄存器中的任何内容并将其用作 x 命令的内存地址 - 并将显示内存中从该地址开始的以下 32 个字。

      gdb 中的变量本身是以 $ 为前缀的名称,gdb 为所有 cpu 寄存器设置预定义变量。

      如果您想检查 esp 寄存器,请使用命令 info registers esp,正如您将在示例中看到的 (x/32xw $esp),esp 寄存器包含显示的第一个地址,0xbffff7e0

      【讨论】:

        【解决方案3】:

        (gdb) x/32xw $esp 这意味着向我展示 esp 指向的 32 个单词字段。

        件数:32, 格式:十六进制, 大小:字(1 个字= gdb 上的 32 位)

        显示 esp 指向的 32 个单词字段 (hex)0xbffff7e0 - (hex)0xbffff7f0 = (dec)3221223392 - (dec)3221223408 = 16bytes=4words

        【讨论】:

        • 请注意,GDB“字”大小不一定与 ISA 对“字”的定义相匹配。例如在 x86(包括 x86-64)上,文档使用 word = 16 位,如 movzx eax, word ptr [rdi]cwd
        猜你喜欢
        • 2017-05-26
        • 2016-04-14
        • 1970-01-01
        • 1970-01-01
        • 2013-10-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多