GDB调试内存分析
在处理问题时需要打印一些变量的信息,进行分析,而有些时候遇到的是地址0x7fff5313f65c,这个时候想要查看这个地址中的数据是什么?又不知道要怎么操作。
在GDB中使用examine(简写x)来查看内存地址中的值。语法: (gdb) x/ (参数)
参数: n, f, u是可选参数。
- n #表示要打印的单元个数;
- f #表示打印格式;
- u #表示单元的大小;
(1)n是一个正整数,表示显示内存的长度,也就是说从当前地址向后显示几个地址的内容。
(2)f表示显示的格式。如果地址所指的时字符串,那么格式可以是s,如果地址是指令地址,那么格式可以是i,其他的如下:
x | 16进制 |
---|---|
d | 有符号的10进制,默认格式 |
u | 无符号的10进制 |
o | 8进制 |
t | 2进制 |
a | 地址 |
c | 字符 |
f | 浮点 |
s | 字符串 |
(3)u表示从的那个前地址往后请求的字节数,如果不指定的话,GDB默认是4个bytes。当我们指定了字节长度后,GDB会从指定内存的内存地址开始,读写指定字节,并把其当作一个值取出来。u参数可以用下面的字符来代替:
b | 单字节 |
---|---|
w | 四字节 |
h | 双字节 |
g | 八字节 |
eg:
(gdb) x/3uh buf :从内存地址buf读取内容,h表示以双字节为一个单位,3表示三个单位,u表示按十六进制显示。