虛擬位址和位移量轉換

來源:互聯網
上載者:User

標籤:blog   http   os   使用   檔案   2014   log   代碼   c   

基礎知識

一、虛擬位址和位移量轉換

  由於Windows程式是運行在386保護模式下,在保護模式下,程式訪問儲存空間所使用的邏輯地址稱為虛擬位址(Virual Address,VA)。與真實位址模式下的分段地址類似,虛擬位址也可寫成"段:位移量"的形式,這裡的段是指段選取器。

  檔案執行時將被映像到指定記憶體位址中,這個初始記憶體位址稱為基址(imageBase)。在Windows NT中,預設的值是10000h;對於DLLs,預設值為400000h。在Windows 9x中,10000h不能用來裝入32位的執行檔案,因為該地址處於所有進程共用的線性地址地區,因此Microsoft將Win32可執行檔的預設基地址改變為400000h。

  相對虛擬位址(Relative Virual Address,RVA)表示此段代碼在記憶體中相對於基地址的位移。即:相對虛擬位址(RVA)=虛擬位址(VA)-基址(imageBase)。

  檔案中的地址與記憶體中表示不同,它是用位移量(File offset)來表示的。

  在SoftICE和W32Dasm下顯示的地址值是記憶體位址(memory offset),或稱之為虛擬位址(Virual Address,VA)。而十六進位工具裡,如:Hiew、Hex Workshop等顯示的地址就是檔案地址,稱之為位移量(File offset) 或物理地址(RAW offset)。

  在實際操作時,使用 RVA-Offset之類的轉換器很容易查出字串RVA和位移量的值。
以Pc_offset(光碟片\tools\offset)此工具為例說說如何將SoftICE下看到的虛擬位址(Virual Address,VA)轉換成十六進位工具裡的位移量(File offset),運行該軟體開啟記事本程式,在Memory Address(記憶體位址)輸入虛擬位址(Virual Address,VA)的值:40117D,點擊"Do it"按鈕將顯示己轉換成檔案位移量(File offset),一所示。



(圖一)記憶體虛擬位址轉換成檔案位移量

虛擬位址和位移量轉換

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.