2010-09-29 75 views
0

雖然在Windows XP 32位調試使用免疫力調試器,我看到了堆在以下方面:位的內存地址

_Address_ -Value_ 
00ff2254 ff090045 
00ff2258 00000002 

我的理解是,每個地址位置包含8位。

這是正確的嗎?

+0

注意,人們通常只能回答你實際上問的問題。 – 2010-09-29 08:56:44

回答

3

如果我正確理解你的問題,答案是肯定的,每個單獨的內存位置包含8位。

調試器一次顯示4個字節(32位),使顯示更加緊湊(因爲許多數據類型佔用32位,因此通常看到32位值很有用)。這就是爲什麼左列中的地址相隔4個地點的原因。

如果調試器同時顯示一個字節(8位),顯示是這樣的:

_Address_ -Value_ 
00ff2254 45 
00ff2255 00 
00ff2256 09 
00ff2257 ff 
00ff2258 02 
00ff2259 00 
00ff225a 00 
00ff225b 00 

(假定你是一個「little-endian」機,其中最現代化的臺式機上)

0

內存位置是指內存的位置,每個連續的內存位置是指內存中的下一個字節。所以,你只能在一個字節邊界上尋址內存,每個人都應該知道一個字節是8位寬的。

2

我認爲你的問題的主要問題是你要求一件事,但我發現潛伏在陰影中的另一個問題。

首先,最重要的是,計算機內存中的可尋址實體組織爲字節,每個字節爲8位,所以是的,每個地址可以被稱爲8位或一個字節。

但是,您可以將更多字節組合在一起以形成更大和更復雜的數據結構。

如果您的問題確實是「爲什麼我在堆棧轉儲中的地址上看到一個8位數值的內容」,那麼原因是它會轉儲32位(4字節)的值。換句話說,你可以取地址,地址+1,地址+2和地址+3,從每個地址獲取字節,並將其組合成一個32位值。

這真的是你的問題嗎?

0

要完成RH的答案,您可能會驚訝於給定地址有這麼多的數字。

你應該考慮

Address Byte (8 bits) 
00ff2254 45 
00ff2255 00 
00ff2256 09 
00ff2257 ff 
00ff2258 02 
... 

(論XP使用的CPU架構)

+0

那麼我可以進一步提出我的問題嗎? 爲什麼每個地址都包含8位。是否因爲內存芯片架構?或者是因爲32位CPU。 對於FreeBSD,Mac,Linux等其他操作系統來說,這是8位嗎? – cperdana 2010-10-01 11:29:36

+0

8位或字節是計算機中常見的便捷數據單元(http://en.wikipedia.org/wiki/Byte)。方便,因爲作爲2(2^3位)的權力,它足夠小,同時能夠存儲所有羅馬字符。8位是您可以從內存獲取的最小數據量。具有32位存儲器總線的計算機允許在一次操作中檢索32位 - 速度更快 - 但最小數據單元仍然是8位。 – 2010-10-01 19:27:11