首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

XP 使用者模式記憶體空間剖析(四):主程式載入佈局與 PE 區段對應

     編輯:關於C++

主程式模組資訊

bash.exe 基址 0x00400000,大小 0x6F000,入口點 0x0045BB30。對應 6 個 MEM_IMAGE 區塊,配置保護均為 PAGE_EXECUTE_WRITECOPY(Copy-on-Write 共享代碼頁)。

PE 區段逐一對應

  1. 檔案頭:0x00400000(含 DOS Header、PE Header、Optional Header、Section Table),屬性 PAGE_READONLY。C 執行期庫 __ImageBase 指向此處。
  2. 代碼段:.text,虛擬位址 0x1000,大小 0x5BE00,屬性 Execute Read。內容與檔案完全一致,反組碼驗證程式碼原樣載入。
  3. 唯讀資料段:.rdata,虛擬位址 0x5D000,大小 0x7000。包含匯入表(IAT)、除錯目錄等,載入後由系統動態修正 IAT 位址。
  4. 讀寫資料段:.data,虛擬位址 0x64000。記憶體分兩區:前段含重定位表(PAGE_READWRITE),後段為全域/靜態變數區(PAGE_READWRITE)。可透過 VirtualQuery 定位資料段基址。
  5. 資源段:.rsrc,虛擬位址 0x68000,大小 0x400,屬性 Read Only,內容與檔案一致。
  6. 重定位段:.reloc,虛擬位址 0x69000,大小 0x5A00,屬性 Discardable, Read Only。內容與檔案一致,基址衝突時由載入器處理。

驗證方法

使用 dumpbin /all 導出 PE 完整結構,對照 VirtualQueryEx 掃描結果與記憶體原始資料,確認區段邊界、屬性與內容一致性。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved