什麼是exe檔案
1. EXE File 可執行程式 一種可在作業系統存儲空間中浮動定位的可執行程式。MS-DOS和MS-WINDOWS下,此類檔案擴展名為.exe
2.windows作業系統中的二進制執行檔,執行檔分兩種一種是後輟名為.COM另一種就是.EXE 了
.COM一般用於DOS,在windows系統中的執行檔案一般都是.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結構對應:
EXEHEADERSTRUC
exSignaturedw4D5AH;.EXE標誌
exExraBytesdw?;最後(部分)頁中的位元組數
exPagesdw?;檔案中的全部和部分頁數
exRelocItemsdw?;重定位表中的指針數
exHeaderSizedw?;以位元組為單位的檔案頭大小
exMinAllocdw?;最小分配大小
exMaxAllocdw?;最大分配大小
exInitSSdw?;初始SS值
exInitSPdw?;初始SP值
exChechSumdw?;補碼校驗值
exInitIPdw?;初始IP值
exInitCSdw?;初始CS值
exRelocTabledw?;重定位表的位元組偏移量
exOverlaydw?;覆蓋號
恢復EXE檔案關聯
EXE檔案關聯出錯非常的麻煩,因為這種情況的出現多是由於病毒引起的,而防毒軟體的主檔案都是EXE檔案,既然EXE檔案關聯出錯,又怎能運行得了防毒軟體呢?還好XP提供了安全模式下的命令行工具供我們使用,可以利用命令行工具來解決這個問題。
在安全模式下輸入:assoc.exe=exefile,螢幕上將顯示“.exe=exefile”。現在關閉命令提示符視窗,按Ctrl+Alt+Del組合鍵調出“Windows安全”視窗,按“關機”按鈕後選擇“重新啟動”選項,按正常模式啟動Windows後,所有的EXE檔案都能正常運行了!
讓EXE檔案暢行無阻
先在命令行輸入:assoc .exe來顯示EXE檔案關聯,系統顯示“沒有為擴展名.exe找到檔案關聯”,難怪EXE檔案都不能執行。接著輸入:ftype | more 來分屏顯示系統中所有的檔案類型,其中有一行顯示為“exefile="%1" %*”,難道只要將EXE檔案與“exefile”關聯,故障就會解決?於是在命令行輸入:assoc .exe=exefile(assoc與.exe之間有一空格),螢幕顯示“.exe=exefile”。現在關閉命令提示符視窗,按[Ctrl+Alt+Del]組合鍵調出“Windows安全”視窗,按[關機]按鈕後選擇“重新啟動”選項,按正常模式啟動Windows 2000後,所有的EXE檔案都能正常運行了。
詳細說明
EXEHEADERENDS程式映象,包含處理器代碼和程式的初始數據,緊接在檔案頭之後。它的大小以位元組為單位,等於.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之上,把控制轉移到位於調整後地址處的程式。
注意
使用信箱或qq傳送檔案時,如果檔案類型是exe檔案。一般伺服器都不允許傳送,甚至會當做病毒而報錯。對此,可將.exe檔案壓縮或修改擴展名後(如改為.ex3)再進行傳送。