原文出处:
https://
blog.csdn.net/weixin_39420907/article/details/88325170?spm=1001.2101.3001.6650.2&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-2-88325170-blog-122732433.pc_relevant_aa_2&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-2-88325170-blog-122732433.pc_relevant_aa_2&utm_relevant_index=5
使用examine命令(简写是x)来查看内存地址中的值。
x命令的语法如下:x/
n、f、u是可选的参数。
n(正整数),表示显示内存的长度。从当前地址向后显示n个地址的内容。
f 表示显示的格式,如果地址所指的是字符串,那么格式可以是s,如果地址是指令地址,那么格式可以是i。
u 表示从当前地址往后请求的字节数。如果不指定的话,GDB默认是4个bytes。u参数可以用下面的字符来代替:b表示单字节,h表示双字节,w表示四字节,g表示八字节。当我们指定了字节长度后,GDB会从指定内存的内存地址开始,读写指定字节,并把其当作一个值取出来。
表示一个内存地址。
n/f/u三个参数可以一起使用。例如:命令:x/3uh 0x54320 表示,从内存地址0x54320读取内容,h表示以双字节为一个单位,3表示三个单位,u表示按十六进制显示。
输出格式一般来说,GDB会根据变量的类型输出变量的值。但你也可以自定义GDB的输出的格式。
例如,你想输出一个整数的十六进制,或是二进制来查看这个整型变量的中的位的情况。
要做到这样,你可以使用GDB的数据显示格式:
x 按十六进制格式显示变量。
d按十进制格式显示变量。
u按十六进制格式显示无符号整型。
o按八进制格式显示变量。
t按二进制格式显示变量。
a按十六进制格式显示变量。
c按字符格式显示变量。
f按浮点数格式显示变量。
所以查看十进制地址的方法即为:
(gdb) x/9db 0x00001fa4
从内存地址0x00001fa4读取内容,b表示以单字节为一个单位,9表示九个单位,d表示按十进制显示。
还有另外一种方法是直接print,由于0xBFFFFAA0是指针的指针所指向的地址,所以查看其内容即为
(gdb) p/d**(char**) 0xBFFFFAA0@9
从内存地址0xBFFFFAA0读取内容,d表示以十进制显示,@9表示读取一片连续的长度为9的地址
另外一个参考的文章,也挺好:
使用gdb查看内存
https://
blog.csdn.net/virgofarm/article/details/97759464?spm=1001.2101.3001.6650.4&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-4-97759464-blog-122732433.pc_relevant_aa_2&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-4-97759464-blog-122732433.pc_relevant_aa_2&utm_relevant_index=9
阅读(2338) | 评论(0) | 转发(0) |