程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> VC >> vc教程 >> 關於PE可執行文件的修改

關於PE可執行文件的修改

編輯:vc教程

在windows 9x、、2000下,所有的可執行文件都是基於Microsoft設計的一種新的文件格式Portable Executable File Format(可移植的執行體),即PE格式。有一些時候,我們需要對這些可執行文件進行修改,下面文字試圖詳細的描述PE文件的格式及對PE格式文件的修改。

1、PE文件框架構成

DOS MZ header
DOS stub
PE header
Section table
Section 1
Section 2
Section ...
Section n

上表是PE文件結構的總體層次分布。所有 PE文件(甚至32位的 DLLs) 必須以一個簡單的 DOS MZ header 開始,在偏移0處有DOS下可執行文件的“MZ標志”,有了它,一旦程序在DOS下執行,DOS就能識別出這是有效的執行體,然後運行緊隨 MZ header 之後的 DOS stub。DOS stub實際上是個有效的EXE,在不支持 PE文件格式的操作系統中,它將簡單顯示一個錯誤提示,類似於字符串 " This program cannot run in DOS mode " 或者程序員可根據自己的意圖實現完整的 DOS代碼。通常DOS stub由匯編器/編譯器自動生成,對我們的用處不是很大,它簡單調用中斷21h服務9來顯示字符串"This program cannot run in DOS mode"。

緊接著 DOS stub 的是 PE header。 PE header 是PE相關結構 IMAGE_NT_HEADERS 的簡稱,其中包含了許多PE裝載器用到的重要域。可執行文件在支持PE文件結構的操作系統中執行時,PE裝載器將從 DOS MZ header的偏移3CH處找到 PE header 的起始偏移量。因而跳過了 DOS stub 直接定位到真正的文件頭 PE header。

PE文件的真正內容劃分成塊,稱之為sections(節)。每節是一塊擁有共同屬性的數據,比如“.text”節等,那麼,每一節的內容都是什麼呢?實際上PE格式的文件把具有相同屬性的內容放入同一個節中,而不必關心類似“.text”、“.data”的命名,其命名只是為了便於識別,所有,我們如果對PE格式的文件進行修改,理論上講可以寫入任何一個節內,並調整此節的屬性就可以了。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved