2011-04-25 74 views
1

這應該是一個簡單的問題:我知道PE = VA = RVA + imagebase,現在我試圖在反彙編器中找到一個字符串,並恰好位於0042720E的.text段。VA和內存地址

imagebase是400000和2720E是RVA,直到現在還好。

但是爲什麼當我在調試器中加載exe時,映射指令的內存是0140720E?

0140720E(我在ram中看到的)和0042720E(VA)的區別在於FE0000,爲什麼?我錯過了什麼嗎?

+0

你在哪個平臺上運行? – JaredPar 2011-04-25 16:46:37

+0

win32,PE是可移植的可執行文件 – 2011-04-25 16:52:23

+0

@Paul:那個特定的.exe是否包含一個基址重定位表? – ildjarn 2011-04-25 17:12:22

回答

4

實際上只有兩種可能性:發生重新分配或者RVA錯誤。更可能的是它的重新分配,特別是如果你在Windows Vista或Windows 7上運行,由於ASLR。根據您的連接方式和您使用的調試器,可以讓調試器調整報告的地址以匹配PE中指定的基本部分加載地址,ollydbg就是其中之一(您必須通過ollydbg啓動應用程序, dlls)

+0

對VS調試器也有效嗎?地址似乎相同 – 2011-04-25 19:45:15

+0

@Paul:不,VS調試器不會做任何這樣的翻譯;它按原樣報告這些VA。如果ASLR在運行,那麼模塊窗口應顯示模塊加載的實際基地址,並從那裏您可以應用RVA。 – 2011-04-25 20:00:51

+0

是的,它的確顯示了一個加到RVA中的地址,它給出了指令地址。那麼這個地址是什麼?一個imagebase +東西隨機? – 2011-04-25 21:17:25