http://kktzf.com.cn/wiki/history/%E5%8F%AF%E6%89%A7%E8%A1%8C%E7%A8%8B%E5%BA%8F?feed=atom 国产亚洲欧洲aⅴ综合一区,国精产品一区一区三区有限公司杨 2025-07-20T15:53:28Z 本wiki上該頁(yè)面的版本歷史 MediaWiki 1.39.3 http://kktzf.com.cn/wiki/%E5%8F%AF%E6%89%A7%E8%A1%8C%E7%A8%8B%E5%BA%8F?diff=108027&oldid=prev 尋找:?以內(nèi)容“'''可執(zhí)行程序'''(EXE File) *一種可在操作系統(tǒng)存儲(chǔ)空間中浮動(dòng)定位的可執(zhí)行程序。MS-DOS和MS-WINDOWS下,此類文件擴(kuò)展名為.exe ...”創(chuàng)建新頁(yè)面 2012-03-30T03:28:53Z <p>以內(nèi)容“&#039;&#039;&#039;可執(zhí)行程序&#039;&#039;&#039;(EXE File) *一種可在<a href="/wiki/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F" title="操作系統(tǒng)">操作系統(tǒng)</a>存儲(chǔ)空間中浮動(dòng)定位的可執(zhí)行程序。MS-DOS和MS-WINDOWS下,此類文件擴(kuò)展名為.exe ...”創(chuàng)建新頁(yè)面</p> <p><b>新頁(yè)面</b></p><div>'''可執(zhí)行程序'''(EXE File)<br /> *一種可在[[操作系統(tǒng)]]存儲(chǔ)空間中浮動(dòng)定位的可執(zhí)行程序。MS-DOS和MS-WINDOWS下,此類文件擴(kuò)展名為.exe <br /> *WINDOWS操作系統(tǒng)中的二進(jìn)制可執(zhí)行文件,可執(zhí)行文件分兩種一種是后輟名為.COM另一種就是.EXE<br /> ==定義==<br /> *.COM一般用于DOS,在[[WINDOWS]]系統(tǒng)中的執(zhí)行文件一般都是.EXE文件。在 MS-DOS 中,用以標(biāo)識(shí)可執(zhí)行文件的文件擴(kuò)展名。用戶在提示行輸入不帶 .exe 擴(kuò)展名的文件名后按 Enter 鍵就能運(yùn)行可執(zhí)行程序<br /> ==文件結(jié)構(gòu)==<br /> *EXE 文件比較復(fù)雜,每個(gè)EXE文件都有一個(gè)文件頭,結(jié)構(gòu)如下:<br /> #EXE文件頭的信息<br /> {|class=&quot;wikitable&quot; border=&quot;1&quot;<br /> |-<br /> !偏移量!!意義<br /> |-<br /> |00h-01h||MZ'EXE文件標(biāo)記<br /> |-<br /> |02h-03h||最后一頁(yè)的字節(jié)數(shù)(每頁(yè)512B)<br /> |-<br /> |04h-05h||文件長(zhǎng)度(字節(jié)數(shù))除以512的商+1<br /> |-<br /> |06h-07h||重定位項(xiàng)的個(gè)數(shù)<br /> |-<br /> |08h-09h||文件頭除16的商<br /> |-<br /> |0ah-0bh||程序運(yùn)行所需最小段數(shù)<br /> |-<br /> |0ch-0dh||....大....<br /> |-<br /> |oeh-0fh||[[堆棧]]段的段值 (SS)<br /> |-<br /> |10h-11h||........sp<br /> |-<br /> |12h-13h||文件校驗(yàn)和<br /> |-<br /> |14h-15h||IP<br /> |-<br /> |16h-17h||CS<br /> |-<br /> |18h-19h||............<br /> |-<br /> |1ah-1bh||............<br /> |-<br /> |1ch||............<br /> |} <br /> *.EXE文件包含一個(gè)文件頭和一個(gè)可重定位程序映象。文件頭包含MS-DOS用于加載程序的信息,例如程序的大小和寄存器的初始值。文件頭還指向一個(gè)重定位表,該表包含指向程序映象中可重定位段地址的指針鏈表。文件頭的形式與EXEHEADER結(jié)構(gòu)對(duì)應(yīng):<br /> #EXEHEADER STRUC<br /> #*exSignature dw 5A4Dh ;.EXE標(biāo)志<br /> #*exExraBytes dw ;最后(部分)頁(yè)中的字節(jié)數(shù)<br /> #*exPages dw ;文件中的全部和部分頁(yè)數(shù)<br /> #*exRelocItems dw ;重定位表中的指針數(shù)<br /> #*exHeaderSize dw ;以字節(jié)為單位的文件頭大小<br /> #*exMinAlloc dw ;最小分配大小<br /> #*exMaxAlloc dw ;最大分配大小<br /> #*exInitSS dw ;初始SS值<br /> #*exInitSP dw ;初始SP值<br /> #*exChechSum dw ;補(bǔ)碼校驗(yàn)值<br /> #*exInitIP dw ;初始IP值<br /> #*exInitCS dw ;初始CS值<br /> #*exRelocTable dw ;重定位表的字節(jié)偏移量<br /> #*exOverlay dw ;覆蓋號(hào)<br /> #EXEHEADER ENDS程序映象<br /> #*包含處理器代碼和程序的初始數(shù)據(jù),緊接在文件頭之后。它的大小以字節(jié)為單位,等于EXE文件的大小減去文件頭的大小,也等于exHeaderSize的域的值乘以16。MS-DOS通過把該映象直接從文件拷貝到內(nèi)存加載.EXE程序然后調(diào)整定位表中說(shuō)明的可重定位段地址。<br /> #*定位表是一個(gè)重定位指針數(shù)組,每個(gè)指向程序映象中的可重定位段地址。文件頭中的exRelocItems域說(shuō)明了數(shù)組中指針的個(gè)數(shù),exRelocTable域說(shuō)明了分配表的起始文件偏移量。每個(gè)重定位指針由兩個(gè)16位值組成:偏移量和段值。 為加載.EXE程序,MS-DOS首先讀文件頭以確定.EXE標(biāo)志并計(jì)算程序映象的大小。然后它試圖申請(qǐng)內(nèi)存。首先,它計(jì)算程序映象文件的大小加上PSP的大小再加上EXEHEADER結(jié)構(gòu)中的exMinAlloc域說(shuō)明的內(nèi)存大小這三者之和,如果總和超過最大可用內(nèi)存塊的大小。則MS-DOS停止加載程序并返回一個(gè)出錯(cuò)值。如果總和沒超過最大可用內(nèi)存塊的大小,它便計(jì)算程序映象的大小加上PSP的大小再加上EXEHEADER結(jié)構(gòu)中exMaxAlloc域說(shuō)明的內(nèi)存大小之和,如果第二個(gè)總和小于最大可用內(nèi)存塊的大小,則MS-DOS 分配計(jì)算得到的內(nèi)存量。否則,它分配最大可用內(nèi)存塊。分配完內(nèi)存后,MS-DOS確定段地址,也稱為起始段地址,MS-DOS從此處加載程序映象。如果exMinAlloc域和exMaxAlloc域中的值都為零,則MS-DOS把映象盡可能地加載到內(nèi)存最高端。否則,它把映象加載到緊挨著PSP域之上。接下來(lái),MS-DOS讀取重定位表中的項(xiàng)目調(diào)整所有由可重定位指針說(shuō)明的段地址。對(duì)于重定位表中的每個(gè)指針,MS-DOS尋找程序映象中相應(yīng)的可重定位段地址,并把起始段地址加到它之上。一旦調(diào)整完畢,段地址便指向了內(nèi)存中被加載程序的代碼和數(shù)據(jù)段。 MS-DOS在所分配內(nèi)存的最低部分建造256字節(jié)的PSP,把AL和AH設(shè)置為加載 .COM程序時(shí)所設(shè)置的值。MS-DOS使用文件頭中的值設(shè)置SP與SS,調(diào)整SS初始值,把起始地址加到它之上。MS-DOS還把ES和DS設(shè)置為PSP的段地址.最后,MS-DOS從程序文件頭讀取CS和IP的初始值,把起始段地址加到CS之 上,把控制轉(zhuǎn)移到位于調(diào)整后地址處的程序。<br /> ==相關(guān)條目==<br /> [[計(jì)算機(jī)程序]]|<br /> [[程序設(shè)計(jì)]]|<br /> [[源代碼]]<br /> ==參考來(lái)源==<br /> *http://baike.baidu.com/view/2473450.htm<br /> [[category:計(jì)算機(jī)|K]]<br /> [[category:程序|K]]</div> 尋找