gdb 查看地址值
时间: 2025-06-03 09:03:19 浏览: 15
### 使用 GDB 查看指定内存地址的值
在调试过程中,有时需要查看特定内存地址的内容。GDB 提供了一个强大的功能来实现这一需求——`x` 命令(examine)。以下是关于 `x` 命令的具体说明以及其用法:
#### 1. `x` 命令基本语法
`x` 命令用于检查内存内容,其通用格式如下:
```plaintext
x/[n][f][u] ADDRESS
```
- **n**: 表示要打印的数据项数量。
- **f**: 数据的显示格式,常见的有:
- `o`: 八进制
- `d`: 十进制
- `u`: 无符号十进制
- `t`: 二进制
- `c`: 字符形式
- `s`: 字符串形式
- `i`: 汇编指令
- `x`: 十六进制[^1]
- **u**: 数据单元大小,可选参数包括:
- `b`: 字节 (byte)
- `h`: 半字 (halfword, 2 bytes)
- `w`: 字 (word, 4 bytes)
- `g`: 巨型字 (giant word, 8 bytes)
#### 2. 示例演示
假设有一个变量存储在一个已知的内存地址中,可以通过以下方式查看该地址的值。
##### 示例代码
创建一个简单的 C 程序并编译为带调试信息的目标文件:
```c
#include <stdio.h>
int main() {
int a = 10;
printf("Value of a is %d\n", a);
return 0;
}
```
编译命令:
```bash
gcc -g example.c -o example
```
##### 加载到 GDB 并运行
启动 GDB 并加载目标程序:
```bash
gdb ./example
```
设置断点并运行程序:
```gdb
break main
run
```
当程序暂停时,可以使用 `info address` 或者直接通过变量名获取其地址:
```gdb
print &a
```
输出可能类似于:
```plaintext
$1 = (int *) 0x7fffffffeabc
```
此时可以用 `x` 命令查看此地址上的值:
```gdb
x/d 0x7fffffffeabc
```
上述命令将以十进制的形式展示地址 `0x7fffffffeabc` 的值。如果希望以十六进制或其他格式显示,则替换 `/d` 参数即可,例如:
```gdb
x/x 0x7fffffffeabc
```
这会返回类似的结果:
```plaintext
0x7fffffffeabc: 0xa
```
#### 3. 高级技巧
除了单个地址外,还可以一次性读取多个连续数据项。例如,读取从某个地址开始的四个整数:
```gdb
x/4dw 0x7fffffffeabc
```
其中:
- `4`: 显示 4 个项目;
- `d`: 以十进制格式显示;
- `w`: 每个项目按单词(4 字节)处理;
#### 注意事项
- 如果尝试访问未分配或非法的内存区域,可能会触发错误提示。
- 地址的有效性和范围取决于当前进程的状态和操作系统环境配置[^2]。
---
###
阅读全文
相关推荐


















