說明:
gdb中使用“x
”命令來打印內存的值,格式為“x/nfu addr
”。含義為以f
格式打印從addr
開始的n
個長度單元為u
的內存值。參數具體含義如下:
a)n:輸出單元的個數。
b)f:是輸出格式。比如x
是以16進制形式輸出,o
是以8進制形式輸出,等等。
c)u:標明一個單元的長度。b
是一個byte
,h
是兩個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,通過這個可以看到各個字段之間的對齊關系