gdb列印資訊2——列印記憶體的值以及使用$_
阿新 • • 發佈:2018-12-07
測試程式碼
#include <stdio.h>
int main (int argc, char *argv[]) {
int i = 0;
char a[100];
for (i = 0; i < sizeof(a); ++i) {
a[i] = i;
}
return 0;
}
測試過程
首先打上斷點,跑起來
這樣,就完成了賦值操作
然後就可以檢視記憶體的值了,這裡的陣列是char型別(1個位元組)的,陣列名是首地址
可以使用x/nfu addr
命令來列印記憶體的值,
意思是以f
格式,列印從addr
開始的n
個長度單元為u
的記憶體值
- n:輸出單元的個數
- f:輸出的格式,x為16進位制形式,o為八進位制,u為十進位制,t為二進位制
- u:一個單元的長度,b是一個byte,h是兩個byte,w是四個byte(一個word)
以16進位制格式列印陣列前16個byte的值
以8進位制格式列印陣列前16個byte的值
以十進位制格式列印陣列前16個byte的值
以二進位制格式列印陣列前16個byte的值
以16進位制格式列印陣列前16個word的值
現在我們換成
int
型別的陣列來看一下,由於int型別佔用四個位元組,那我們會得到什麼樣的結果呢
可以看到,每四個位元組才完成一次賦值操作。
使用$_
在使用了
x
或者是info
等命令後,會把最後檢查的記憶體地址存在$_
中,並且把地址中的內容放在$__
中