?? exe文件窺視.txt
字號:
exe文件內部窺視2007年12月30日 星期日 下午 03:15exe一定義
1. EXE File 可執行程序 一種可在操作系統存儲空間中浮動定位的可執行程序。MS-DOS和MS-WINDOWS下,此類文件擴展名為.exe
2.WINDOWS操作系統中的二進制可執行文件,可執行文件分兩種一種是后輟名為.COM另一種就是.EXE 了
.COM一般用于DOS,在WINDOWS系統中的執行文件一般都是.EXE文件
二 EXE文件結構
EXE 文件比較復雜,每個EXE文件都有一個文件頭,結構如下:
EXE文件頭信息
―――――――――――――――――――
├ 偏移量 ┤ 意義 ┤
├00h-01h ┤MZ'EXE文件標記 ┤
├2h-03h ┤文件長度除512的余數 ┤
├04h-05h ┤...............商 ┤
├06h-07h ┤重定位項的個數 ┤
├08h-09h ┤文件頭除16的商 ┤
├0ah-0bh ┤程序運行所需最小段數 ┤
├0ch-0dh ┤..............大.... ┤
├oeh-0fh ┤堆棧段的段值 (SS) ┤
├10h-11h ┤........sp ┤
├12h-13h ┤文件校驗和 ┤
├14h-15h ┤IP ┤
├16h-17h ┤CS ┤
├18h-19h ┤............ ┤
├1ah-1bh ┤............ ┤
├1ch ┤............ ┤
―――――――――――――――――――――――――
.EXE文件包含一個文件頭和一個可重定位程序映象。文件頭包含MS-DOS用于加載程序的信息,例如程序的大小和寄存器的初始值。文件頭還指向一個重定位表,該表包含指向程序映象中可重定位段地址的指針鏈表。文件頭的形式與EXEHEADER結構對應:
EXEHEADER STRUC
exSignature dw 5A4Dh ;.EXE標志
exExraBytes dw ? ;最后(部分)頁中的字節數
exPages dw ? ;文件中的全部和部分頁數
exRelocItems dw ? ;重定位表中的指針數
exHeaderSize dw ? ;以字節為單位的文件頭大小
exMinAlloc dw ? ;最小分配大小
exMaxAlloc dw ? ;最大分配大小
exInitSS dw ? ;初始SS值
exInitSP dw ? ;初始SP值
exChechSum dw ? ;補碼校驗值
exInitIP dw ? ;初始IP值
exInitCS dw ? ;初始CS值
exRelocTable dw ? ;重定位表的字節偏移量
exOverlay dw ? ;覆蓋號
EXEHEADER ENDS程序映象,包含處理器代碼和程序的初始數據,緊接在文件頭之后。它的大小以字節為單位,等于.EXE文件的大小減去文件頭的大小,也等于exHeaderSize的域的值乘以16。MS-DOS通過把該映象直接從文件拷貝到內存加載.EXE程序然后調整定位表中說明的可重定位段地址。
定位表是一個重定位指針數組,每個指向程序映象中的可重定位段地址。文件頭中的exRelocItems域說明了數組中指針的個數,exRelocTable域說明了分配表的起始文件偏移量。每個重定位指針由兩個16位值組成:偏移量和段值。 為加載.EXE程序,MS-DOS首先讀文件頭以確定.EXE標志并計算程序映象的大小。然后它試圖申請內存。首先,它計算程序映象文件的大小加上PSP的大小再加上EXEHEADER結構中的exMinAlloc域說明的內存大小這三者之和,如果總和超過最大可用內存塊的大小。則MS-DOS停止加載程序并返回一個出錯值。否則面,它計算程序映象的大小加上PSP的大小再加上EXEHEADER結構中exMaxAlloc域說明的內存大小之和,如果第二個總和小于最大可用內存塊的大小,則MS-DOS 分配計算得到的內存量。否則,它分配最大可用內存塊。分配完內存后,MS-DOS確定段地址,也稱為起始段地址,MS-DOS從此處加載程序映象。如果exMinAlloc域和exMaxAlloc域中的值都為零,則MS-DOS把映象盡可能地加載到內存最高端。否則,它把映象加載到緊挨著PSP域之上。接下來,MS-DOS讀取重定位表中的項目調整所有由可重定位指針說明的段地址。對于重定位表中的每個指針,MS-DOS尋找程序映象中相應的可重定位段地址,并把起始段地址加到它之上。一旦調整完畢,段地址便指向了內存中被加載程序的代碼和數據段。 MS-DOS在所分配內存的最低部分建造256字節的PSP,把AL和AH設置為加載 .COM程序時所設置的值。MS-DOS使用文件頭中的值設置SP與SS,調整SS初始值,把起始地址加到它之上。MS-DOS還把ES和DS設置為PSP的段地址.最后,MS-DOS從程序文件頭讀取CS和IP的初始值,把起始段地址加到CS之 上,把控制轉移到位于調整后地址處的程序
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -