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

XP 使用者模式記憶體空間剖析(六):使用者 DLL 載入佈局以 cygwin.dll 為例

     編輯:關於C++

cygwin.dll 載入概覽

自行編譯的 cygwin.dll 佔用異常多記憶體區塊,共 7 個 MEM_IMAGE 區塊,遠超系統 DLL 的 4~5 區塊。

PE 區段與記憶體區塊對應

  1. 檔案頭:0x10000000 起始,大小 0x1000,滿足映像基址與區段對齊需求。
  2. 代碼段:.text,虛擬位址 0x1000,大小 0xA5000,屬性 Execute Read,原樣複製。
  3. 唯讀資料段:.rdata,虛擬位址 0xA6000,大小 0x37400,屬性 Read Only。
  4. 讀寫資料段:.data,虛擬位址 0xDE000,檔案中原始資料僅 0x1C00,但虛擬大小 0x13FEBC。記憶體中分為兩區塊:前段含重新定位表(PAGE_READWRITE),後段為全域變數區(PAGE_READWRITE)。
  5. 資源與重定位段:.rsrc(Read Only)與 .reloc(Discardable, Read Only)共用一記憶體區塊。

額外區塊來源

PE 選擇性標頭 Data Directories 中包含 Export、Import、Resource、Base Relocation、Debug、Load Config、IAT 等 7 個目錄,推測導致額外記憶體區塊產生(如 IAT 修正、重定位處理、除錯資訊映射等)。

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