複製鏈接
請複製以下鏈接發送給好友

可執行程序

鎖定
可執行程序(executable program,EXE File)是可在操作系統存儲空間中浮動定位的二進制可執行程序。它可以加載到內存中,由操作系統加載並執行。特定的CPU指令集(如X86指令集)對應的不同平台之間的可執行程序不可直接移植運行。
中文名
可執行程序
外文名
executable program
後綴名
.com .exe等
特    點
在操作系統存儲空間中浮動定位
用    途
完成各項計算機功能

可執行程序簡介

windows操作系統中的二進制可執行文件分兩種:一種後輟名為.COM,另一種是.EXE 。在MS-DOS下,有重名的.EXE文件和.COM文件運行時,優先執行.COM文件。如果只有A.EXE,就可以直接輸入"A",而不用輸入全名。但如果有A.COM和A.EXE,輸入A則優先執行A.COM,要運行A.EXE只能輸入A.EXE而不能輸入A。在WINDOWS系統中的執行文件一般都是.EXE文件。在windows中,用户在命令提示符輸入不帶 .exe 擴展名的文件名後按 Enter 鍵或者點雙擊就能運行可執行程序。linux不像MS-DOS/windows一樣靠文件後綴名來判斷是否可執行,而是靠文件屬性來判斷。每個文件專門有個屬性來表示文件是否可執行,對於腳本之類的程序,文件第一行指明執行本腳本的程序位置。
windows/MS-DOS下的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。

可執行程序反編譯

計算機軟件反向工程也稱為計算機軟件還原工程,是指通過對他人軟件的目標程序(可執行程序)進行“逆向分析、研究”工作,以推導出他人的軟件產品所使用的思路、原理、結構、算法、處理過程、運行方法等設計要素,某些特定情況下可能推導出源代碼。
反彙編是把目標代碼轉為彙編代碼的過程,是把二級制可執行程序機器語言轉換為彙編語言代碼,常用於軟件破解、病毒分析、逆向工程、軟件漢化等領域。
常用軟件debugW32DasmC32Asm
修改軟件UEStudio開發環境等