在 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
…
⚠️ 注意事项
(gdb) x/x $rsp # 查看栈指针指向的值
💡 实用技巧
- 快速查看栈内存:(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命令的设置(默认初始设置是:数量为1,格式为十六进制,大小为字)。
- 地址可以是表达式,例如变量名、函数名,或者是一个十六进制地址(如0x400000)。
示例:
- w 表示4字节,x表示十六进制格式。
- 10 表示10个元素,x表示十六进制,b表示每个元素一个字节。
- s 表示字符串,会一直显示直到遇到空字符(‘\\0’)。
- 5i 表示显示5条指令(i表示指令)。
或者指定格式: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命令对于调试程序尤其是底层程序(如操作系统、嵌入式系统)非常有帮助。
评论前必须登录!
注册