可執行程序

可執行程序

可在操作系統存儲空間中浮動定位的程序
可執行程序(executable program,EXE File)是指一種可在操作系統存儲空間中浮動定位的程序。[2]在MS-DOS和MS-WINDOWS下,此類文件擴展名為·exe。WINDOWS操作系統中的二進制可執行文件,分兩種:一種後辍名為·com,另一種是·exe。DOS規定,有重名的exe和com,運行時優先執行com文件。如果隻有A.exe,就可以直接輸入A,而不用輸入全名。但如果有A.com和A.exe,輸入A則優先執行A.com,要運行A.exe隻能輸入A.exe而不能輸入A。一般用于DOS,在WINDOWS系統中的執行文件一般都是.exe文件。在 MS-DOS 中,用以标識可執行文件的文件擴展名。用戶在提示行輸入不帶 .exe 擴展名的文件名後按 Enter 鍵或者點雙擊就能運行可執行程序。
  • 中文名:可執行程序
  • 外文名:executable program
  • 所屬類别:計算機 windows
  • 後綴名:com exe
  • 特點:在操作系統存儲空間中浮動定位
  • 用途:完成各項計算機功能
  • 反編譯軟件:W32DasmC32Asm

文件結構

EXE 文件比較複雜,每個EXE文件都有一個文件頭,結構如下。

EXE文件頭的信息

├偏移量┤意義 ┤

├00h-01h ┤MZ'EXE文件标記 ┤

├02h-03h ┤最後一頁的字節數(每頁512B) ┤

├04h-05h ┤文件長度(字節數)除以512的商+1 -| ┤

├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之 上,把控制轉移到位于調整後地址處的程序。

文件格式

Linux32/64位可執行文件

Linux是靠文件屬性來判斷判斷是否可執行。每個文件專門有個屬性來表示文件是否可執行。

MS-DOS可執行文件

最簡單的可執行文件格式,可以在MS-DOS和32位的WINDOWS中運行。它通過在文件頭添加ASCII字符串“MZ”(16進制中表示為4D5A)來标識。“MZ”是MS-DOS開發者之一的馬克·茨柏克沃斯基(Mark Zbikowski)的姓名首字母縮寫DOS可執行文件是16位可執行文件,運行于兼容x86指令集(或x86虛拟機)下的實模式或虛拟8086模式。

16位NE X86可執行文件

通過在文件頭添加ASCII字符串“NE”來标識。它隻能運行在Windows和OS/2系統,而不能在DOS下運行。

16/32位X86可執行文件

通過在文件頭添加ASCII字符串“LE”來标識。它僅用來在Windows 3.x和Windows 9x中替代VxD驅動。

32位線性可執行文件

通過在文件頭添加ASCII字符串“LX”來标識。運行在OS/2 2.0以及更高版本中,也可用于某些DOS擴展。

32位X86可執行文件

這是最複雜也最流行的可執行文件格式,通過在文件頭添加ASCII字符串“PE”來标識。它主要運行于Windows 95和Windows NT以及更高版本的Windows中,也可在BeOS R3中運行。

64位X86-64可執行文件

與前一種類似,但使用支持64位的X86cpu(64根地址總線)。因此它僅能在64位的Windows系統中運行,譬如Windows 7 64位和 Windows10 X64。

反編譯

計算機軟件反向工程也稱為計算機軟件還原工程,是指通過對他人軟件的目标程序(可執行程序)進行“逆向分析、研究”工作,以推導出他人的軟件産品所使用的思路、原理、結構、算法、處理過程、運行方法等設計要素,某些特定情況下可能推導出源代碼。

反彙編是把目标代碼轉為彙編代碼的過程,是把二級制可執行程序機器語言轉換為彙編語言代碼,常用于軟件破解、病毒分析、逆向工程、軟件漢化等領域。

常用軟件debug、W32Dasm、C32Asm等

修改軟件UEStudio開發環境等

相關詞條

相關搜索

其它詞條