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)容“'''可執(zhí)行程序'''(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="wikitable" border="1"<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>
尋找