用GDB檢視記憶體內容

longtrue發表於2007-09-08
你可以使用examine命令(簡寫是x)來檢視記憶體地址中的值。x命令的語法如下所示:

x/

n、f、u是可選的引數。

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) p i
$21 = 101

(gdb) p/a i
$22 = 0x65

(gdb) p/c i
$23 = 101 'e'

(gdb) p/f i
$24 = 1.41531145e-43

(gdb) p/x i
$25 = 0x65

(gdb) p/t i
$26 = 1100101[@more@]

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/7406370/viewspace-968534/,如需轉載,請註明出處,否則將追究法律責任。

相關文章