09GDB查看内存分布

说明:

gdb中使用“x”命令来打印内存的值,格式为“x/nfu addr”。含义为以f格式打印从addr开始的n个长度单元为u的内存值。参数具体含义如下:
a)n:输出单元的个数。
b)f:是输出格式。比如x是以16进制形式输出,o是以8进制形式输出,等等。
c)u:标明一个单元的长度。b是一个byteh是两个byte(halfword),w是四个byte(word),g是八个byte(giant word)。

 例如打印连续的4个整数的内存:x / 4dw ptr

其中ptr是连续内存的首地址,d表示的整数格式。

 

1. 整形内存查看

 

 1)要断点的代码行12

2)执行断点命令,断点到代码行12
3)运行程序,停止在代码行12
4)执行查看整数d内存的分布的命令:x /4xb &d,4代表4个单位,b代表单位为字节,x代表显示格式为16进制(使用16进制显示方便,因为一个字节正好可以显示两个16进制的数字)
5)p /x d 查看变量d的16进制数字:0x138

可以看到,内存分布是小端序:0x38 0x01,逆序后:0x138,和我们查看到的内存是一致的。

 

 2. 查看char*/char[]内存结构

 

 通过上图可以看出,先求char*/char[]的长度,然后再获取它们的内存结构。6db或者3db中的d代表10进制显示

2. 结构体内存查看

 

1)待查看结构体变量

2)断点到结构体变量初始化之后

3)运行

4)查看结构体变量总共内存大小

5)查看结构体变量内存分布:x  /20b  &tc,三部分分别是命令x, 查看长度20个字节,待查看变量的地址&tc

6)结构体变量的第一部分char name[12],他后面的97对应的字段是gener,33对应的的是age,通过这个可以看到各个字段之间的对齐关系

 

posted @ 2022-01-17 23:11  邱明成  阅读(1290)  评论(0编辑  收藏  举报