gdb 查看指令
使用 x 命令和内存地址:
x (examine) 命令允许你检查内存中的数据。你可以指定要检查的内存地址、格式和单位。
基本语法: x /nfu addr
n:要显示的单位数量。
f:显示格式(例如,x 表示十六进制,t 表示二进制,d 表示十进制)。
u:单位大小(b 表示字节,h 表示半字(16 位),w 表示字(32 位),g 表示巨字(64 位))。
addr:要检查的内存地址。
示例: 假设有一个 32 位整数 val,其地址为 0x12345678,你想以 16 位为单位查看:
1 | x /2ht 0x12345678 |
这将显示从 0x12345678 开始的两个半字(16 位)的十六进制值。
结合 p 命令获取地址: 你可以使用 p &变量名 获取变量的地址,然后将其传递给 x 命令。
1 |
|
编译并用 GDB 调试:
1 | gcc -g test.c -o test |
在 GDB 中:
1 | (gdb) break main |
这里注意字节序,在小端序机器上,低位字节在前,高位字节在后,所以显示为 0x5678 0x1234。
如果想要二进制显示,则使用:
1 | x /2ht 0x7fffffffe0dc |
使用表达式和位运算(对于变量值):
如果你只想查看变量的值,而不需要查看内存,可以使用 C 语言的位运算来提取 16 位部分,然后使用 p/t 显示。
示例:
1 | int val = 0x12345678; |
在 GDB 中:
1 | (gdb) p/t (val & 0xFFFF) // 获取低 16 位 |
总结:
对于查看内存中的数据(包括变量在内存中的表示),使用 x 命令结合 h (半字) 和 t (二进制) 格式指定符是最直接的方法。
对于只查看变量的值,使用位运算提取 16 位部分,然后使用 p/t 也是一个有效的选择。
选择哪种方法取决于你的具体需求。如果你需要查看变量在内存中的布局(例如,在结构体或数组中),x 命令是更好的选择。如果你只需要查看变量值的不同部分,位运算可能更方便。