可以使用examine命令(簡(jiǎn)寫(xiě)是x)來(lái)查看內(nèi)存地址中的值。x命令的語(yǔ)法如下所示:
x/<n/f/u> <addr>
n、f、u是可選的參數(shù)。
n是一個(gè)正整數(shù),表示需要顯示的內(nèi)存單元的個(gè)數(shù),也就是說(shuō)從當(dāng)前地址向后顯示幾個(gè)內(nèi)存單元的內(nèi)容,一個(gè)內(nèi)存單元的大小由后面的u定義。
f 表示顯示的格式,參見(jiàn)下面。如果地址所指的是字符串,那么格式可以是s,如果地十是指令地址,那么格式可以是i。
u 表示從當(dāng)前地址往后請(qǐng)求的字節(jié)數(shù),如果不指定的話,GDB默認(rèn)是4個(gè)bytes。u參數(shù)可以用下面的字符來(lái)代替,b表示單字節(jié),h表示雙字節(jié),w表示四字 節(jié),g表示八字節(jié)。當(dāng)我們指定了字節(jié)長(zhǎng)度后,GDB會(huì)從指內(nèi)存定的內(nèi)存地址開(kāi)始,讀寫(xiě)指定字節(jié),并把其當(dāng)作一個(gè)值取出來(lái)。
<addr>表示一個(gè)內(nèi)存地址。
注意:嚴(yán)格區(qū)分n和u的關(guān)系,n表示單元個(gè)數(shù),u表示每個(gè)單元的大小。
n/f/u三個(gè)參數(shù)可以一起使用。例如:
命令:x/3uh 0x54320 表示,從內(nèi)存地址0x54320讀取內(nèi)容,h表示以雙字節(jié)為一個(gè)單位,3表示輸出三個(gè)單位,u表示按十六進(jìn)制顯示。
輸出格式
一般來(lái)說(shuō),GDB會(huì)根據(jù)變量的類型輸出變量的值。但你也可以自定義GDB的輸出的格式。例如,你想輸出一個(gè)整數(shù)的十六進(jìn)制,或是二進(jìn)制來(lái)查看這個(gè)整型變量的中的位的情況。要做到這樣,你可以使用GDB的數(shù)據(jù)顯示格式:
x 按十六進(jìn)制格式顯示變量。
d 按十進(jìn)制格式顯示變量。
u 按十六進(jìn)制格式顯示無(wú)符號(hào)整型。
o 按八進(jìn)制格式顯示變量。
t 按二進(jìn)制格式顯示變量。
a 按十六進(jìn)制格式顯示變量。
c 按字符格式顯示變量。
f 按浮點(diǎn)數(shù)格式顯示變量。
(gdb) help x
Examine memory: x/FMT ADDRESS.
ADDRESS is an exPRession for the memory address to examine.
FMT is a repeat count followed by a format letter and a size letter.
Format letters are o(octal), x(hex), d(decimal), u(unsigned decimal),
t(binary), f(float), a(address), i(instruction), c(char) and s(string).
Size letters are b(byte), h(halfWord), w(word), g(giant, 8 bytes).
The specified number of objects of the specified size are printed
according to the format.
Defaults for format and size letters are those previously used.
Default count is 1. Default address is following last thing printed
with this command or "print".
(gdb) p f1
$4 = 8.25
(gdb) p f2
$5 = 125.5
(gdb) x/x &f1
0xbffff380: 0x41040000
(gdb) x/xw &f1
0xbffff380: 0x41040000
(gdb) x/xw &f2
0xbffff384: 0x42fb0000
(gdb) x/2xw &f1
0xbffff380: 0x41040000 0x42fb0000
(gdb) x/4xw &f1
0xbffff380: 0x41040000 0x42fb0000 0xbffff408 0x00bcba66
(gdb) x/tw &f1
0xbffff380: 01000001000001000000000000000000
(gdb) x/2tw &f1
0xbffff380: 01000001000001000000000000000000 01000010111110110000000000000000
(gdb) p record
$10 = {12, 76, 48, 62, 94, 17, 32, 37, 52, 69}
(gdb) p &record
$11 = (int (*)[10]) 0x8049740
(gdb) x/4uw 0x8049740
0x8049740 <record>: 12 76 48 62
(gdb) x/6ow 0x8049740
0x8049740 <record>: 014 0114 060 076
0x8049750 <record+16>: 0136 021
|
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注