GDB调试中x命令用法详解
x命令是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 0x400000w表示4字节,x表示十六进制格式。
- 以十六进制查看10个连续的字节:
x/10xb 0x40000010表示10个元素,x表示十六进制,b表示每个元素一个字节。
- 以字符格式查看一个地址(直到遇到空字符):
x/s 0x400000s表示字符串,会一直显示直到遇到空字符(‘\0’)。
- 以汇编指令格式查看一个地址:
x/5i 0x4000005i表示显示5条指令(i表示指令)。
- 查看某个变量的内存:
或者指定格式:x &my_variablex/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命令对于调试程序尤其是底层程序(如操作系统、嵌入式系统)非常有帮助。
openvela 操作系统专为 AIoT 领域量身定制,以轻量化、标准兼容、安全性和高度可扩展性为核心特点。openvela 以其卓越的技术优势,已成为众多物联网设备和 AI 硬件的技术首选,涵盖了智能手表、运动手环、智能音箱、耳机、智能家居设备以及机器人等多个领域。
更多推荐


所有评论(0)