GDB查看指定内存地址的内容——指令x

Overview:

examine指令参数

详解

上图(截自GDB Cheat Sheet)中,指出了GDB中查看指定内存地址内容的指令:
examine命令(简写是x)。

x命令的语法如下所示:

x/  <n/f/u>  <addr>

其中,n、f、u是可选的参数。addr表示待查看的内存地址。

n是一个正整数,表示显示内存的长度,也就是说从当前地址向后显示几个地址(units)的内容。
f表示显示的格式(format),见下面“GDB打印数据显示格式”。如果地址所指的是null-terminated string,那么格式可以是s,如果地址是machine instruction,那么格式可以是i。默认初始使用十六进制格式。
u表示(the unit size)从当前地址往后请求的位宽大小。如果不指定的话,GDB默认是4个bytes。u参数可以用下面的字符来代替,b表示单字节,h表示双字节,w表示四字 节,g表示八字节。当我们指定了位宽长度后,GDB会从指内存定的内存地址开始,读写指定位宽大小,并把其当作一个值取出来。

n/f/u三个参数可以一起使用。例如:
命令:x/3uh 0x7ff320
表示,从内存地址0x7ff320读取内容,h表示以双字节为一个单位,3表示三个单位,u表示按十进制显示无符号整型。

GDB打印数据显示格式:[参考这儿][1]
x (hexadecimal)按十六进制格式显示变量。
d (signed decimal)按十进制格式显示变量。
u (unsigned decimal)按十进制格式显示无符号整型。
o (octal)按八进制格式显示变量。
t (binary)按二进制格式显示变量。
a (address)按十六进制格式显示地址,并显示距离前继符号的偏移量(offset)。常用于定位未知地址(变量)。
c (character)按字符格式显示变量。
f (floating)按浮点数格式显示变量。

**示例**
(gdb) p buf
$1 = 101 

(gdb) p/a buf
$2 = 0x65

(gdb) p/c buf
$3 = 101 'e'

(gdb) p/f buf
$4 = 1.41531145e-43

(gdb) p/x buf
$5 = 0x65

(gdb) p/t buf
$6 = 1100101

(gdb) x/10x $sp   打印当前栈stack的前10个元素

Notes:
一个很好用的GDB速查手册:GDB Cheat Sheet


Reference:

官网对Examining memory的解析

  • 19
    点赞
  • 64
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值