云计算百科
云计算领域专业知识百科平台

GDB调试中x命令用法详解

在 GDB 调试器中,x 命令(全称 examine)用于查看指定内存地址的值。其基本语法如下:

x/[选项] <内存地址>

📌 核心参数说明

参数类型选项含义示例
格式 x 十六进制整数 x/x 0x4000
d 十进制整数 x/d 0x4000
u 无符号十进制整数 x/u 0x4000
o 八进制整数 x/o 0x4000
t 二进制整数 x/t 0x4000
c 字符(ASCII) x/c 0x4000
s 字符串(以 \\0 结尾) x/s 0x4000
i 汇编指令 x/i 0x4000
单位 b (byte) 1 字节 x/4xb 0x4000
h (half) 2 字节(半字) x/2xh 0x4000
w (word) 4 字节(字,默认单位) x/1xw 0x4000
g (giant) 8 字节(巨字,64位) x/1xg 0x4000
数量 n 显示连续 n 个单位 x/10xw 0x4000

🔍 常用组合示例

  • 查看地址 0x4000 处的 1 个 4 字节值(十六进制)

    (gdb) x/xw 0x4000

    • 输出:0x4000: 0xdeadbeef
  • 连续查看 4 个字节(十六进制 + 字符形式)

    (gdb) x/4xb 0x4000

    • 输出:0x4000: 0x41 'A' 0x42 'B'
      0x4002: 0x43 'C' 0x00 '\\0'

  • 查看字符串(自动解析直到 \\0)

    (gdb) x/s 0x4000

    • 输出:0x4000: "Hello World"
  • 查看 10 条汇编指令

    (gdb) x/10i 0x4000

    • 输出:0x4000: push %rbp
      0x4001: mov %rsp,%rbp


  • ⚠️ 注意事项

  • 省略单位时:默认使用 w(4字节),如 x/x 0x4000 等价于 x/xw 0x4000。
  • 省略数量时:默认显示 1 个单位,如 x/x 只显示 1 个值。
  • 地址表达式:可直接用变量名或寄存器:(gdb) x/x &my_var # 查看变量 my_var 的地址值
    (gdb) x/x $rsp # 查看栈指针指向的值

  • 连续查看:按 Enter 键 可重复上一条 x 命令(自动递增地址)。

  • 💡 实用技巧

    • 快速查看栈内存:(gdb) x/16xw $sp # 查看栈顶开始的 16 个字(64字节)
    • 混合显示格式:(gdb) x/4xw 0x4000 # 4 个十六进制字
      (gdb) x/4i 0x4000 # 4 条汇编指令

    通过灵活组合格式/单位/数量,x 命令可高效分析内存数据!


    在GDB(GNU调试器)中,x 命令用于检查内存的内容。x 代表 “examine”(检查)。这个命令非常灵活,可以通过不同的参数来控制显示的内存地址、显示格式、显示的数据大小以及要显示的元素数量。

    基本语法:

    x/[数量][格式][大小] 地址

    参数说明:

  • 数量:要显示的元素数量(十进制整数)。
  • 格式:指定显示数据的格式。常用格式字符有:
    • x:十六进制
    • d:有符号十进制
    • u:无符号十进制
    • o:八进制
    • t:二进制(即 “two” 的缩写)
    • a:地址(指针)
    • c:字符
    • s:字符串
    • i:指令(汇编语言)
    • f:浮点数
  • 大小:指定每个元素的大小。大小字符有:
    • b:字节(byte,1字节)
    • h:半字(halfword,2字节)
    • w:字(word,4字节)(在64位系统上,默认是4字节,但也可以使用g表示8字节)
    • g:巨字(giant word,8字节)
  • 地址:要检查的内存地址。如果省略,则使用上一次x命令之后的下一个地址(即连续使用x命令会按顺序显示)。
  • 注意事项:

    • 如果省略数量、格式或大小中的某些部分,则使用上一次x命令的设置(默认初始设置是:数量为1,格式为十六进制,大小为字)。
    • 地址可以是表达式,例如变量名、函数名,或者是一个十六进制地址(如0x400000)。

    示例:

  • 以十六进制格式查看一个地址(4字节):x/wx 0x400000
    • w 表示4字节,x表示十六进制格式。
  • 以十六进制查看10个连续的字节:x/10xb 0x400000
    • 10 表示10个元素,x表示十六进制,b表示每个元素一个字节。
  • 以字符格式查看一个地址(直到遇到空字符):x/s 0x400000
    • s 表示字符串,会一直显示直到遇到空字符(‘\\0’)。
  • 以汇编指令格式查看一个地址:x/5i 0x400000
    • 5i 表示显示5条指令(i表示指令)。
  • 查看某个变量的内存:x &my_variable

    或者指定格式:x/d &my_variable # 以十进制整数查看

  • 其他技巧:

    • 重复上一次的x命令:直接输入x(不带参数)或按回车(如果上一条命令是x,则重复执行)。
    • 更改默认的显示格式:例如,set output-radix 16 可以将默认输出基数设为十六进制,但通常直接在x命令中指定格式更方便。

    示例演示:

    假设我们有一个变量int a = 42;,我们想查看它的内存:

    (gdb) p &a # 获取变量a的地址,假设输出为 0x7fffffffde44
    (gdb) x/wd 0x7fffffffde44 # 以4字节(w)十进制(d)查看
    0x7fffffffde44: 42
    (gdb) x/wx 0x7fffffffde44 # 以4字节十六进制查看
    0x7fffffffde44: 0x0000002a

    总结:

    x 命令是GDB中非常强大的内存检查工具,通过组合数量、格式和大小,可以灵地查看内存内容。熟练掌握x命令对于调试程序尤其是底层程序(如操作系统、嵌入式系统)非常有帮助。

    赞(0)
    未经允许不得转载:网硕互联帮助中心 » GDB调试中x命令用法详解
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!