了解pe檔案是了解windows系統的必經之路。下面把自己學習pe檔案相關知識的方法以及經驗和大家分享,其中前半部分在很大程度上參考了《windows核心程式設計》,只是簡單的從中提取出個人認為精煉的分析,並新增一點個人的理解。如果你也想學習windows程式設計,了解windows系統是如何執行的,那麼這本書絕對不可或缺。
學習一種新知識總喜歡用「hello world」開始。呵呵。
編譯hello world
使用 windows
的 cl.exe
對 hello world
原始檔進行編譯,生成
.exe
檔案,即
pe(portable execute)
檔案。 使用
peid
(乙個用於分析
pe pe
檔案的格式。
可以檢視各section的偏移量及大小,如下圖
pe檔案與虛擬記憶體對映
win32
下系統為每個程序分配了
3g 大小的虛擬記憶體空間,程序執行時,將所需動態鏈結庫以及
pe 檔案等,
載入到虛擬記憶體中,
.exe
檔案裝載基址為
00400000 。
pe 檔案與虛擬記憶體
之間對映關係
記憶體中程序位址空間分割槽
程序位址空間分割槽(核心模式)
核心模式分割槽存放作業系統駐留**。執行緒排程,記憶體管理,檔案系統支援,網路支援和所有裝置驅動程式**都存放於此。此分割槽可被所用程序共享。試圖訪問此分割槽中的記憶體位址,程序將會引發記憶體非法訪問,系統向使用者提示並將應用程式關閉。
(那麼所有程序又是如何共享此分割槽的呢?)
程序位址空間分割槽(64kb禁止進入)
為了作業系統實現的簡單而設此分割槽,假設使用者模式分割槽和核心模式分割槽緊挨,在使用者模式下分配一段空間可能會影響到核心模式分割槽。設定64kb禁止進入區就可以防止違規訪問,避免核心**受到影響。
程序位址空間分割槽(無效斷點分配)
此分割槽用於幫助程式設計師捕獲無效斷點分配(叫無效指標分配更好一些)。
當函式返回
null
( 0x00000000
)時,對該記憶體位址進行訪問,將被認定為非法訪問操作,作業系統終止這個程序的執行。
PE檔案學習筆記(3)
the section table 這個字段位於pe 表頭和真正的 section 資料之間,其中內含 image 的 每乙個sections 的資訊。section table 的每一筆資料貯存了乙個位址,在那裡,檔案的原始資料被映像到記憶體。雖然sections 類似 32 位的 segment...
PE檔案學習系列筆記四 C 實現PE檔案的分析
合肥程式設計師群 49313181。合肥實名程式設計師群 128131462 不願透露姓名和資訊者勿加入 q q 408365330 e mail egojit qq.com 綜述 c 實現 首先實現這些如圖程式的功能,其中包括識別是否是pe檔案,其次是給出,pe檔案在磁碟中的對齊尺寸和記憶體中的對...
PE 檔案格式學習
以前總在網上看看介紹pe檔案格式的文章,看的時候看到一大堆的結構體就蛋疼了,想想現在我這個居然都不清楚以後咋裝bi呢 今天下了個peview邊看變學了 先自己隨便寫個控制台程式,然後加進去就有了,讓後我們可以看看這個檔案到底是怎麼組成的。從這個樹形結構我們能很清楚的理解這個檔案的整體構成,在網上有很...