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

Overview:

GDB查看指定内存地址的内容——指令x_第1张图片

详解

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

x命令的语法如下所示:

x/    

其中,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的解析

你可能感兴趣的:(程序员工具利器)