Windows可執行文件簡述(二)

Windows可執行文件簡述(二)

 

如果PSP中的第一個FCB含有一個有效驅動器標識符,則置AL00h,否則爲0FFhMS-DOS還置AH00h0FFh,這依賴於第二個FCB是否含有一個有效驅動器標識符。

<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

 

建造PSP後,MS-DOSPSP後立即開始(偏移100h)加載com文件,它置SSDSESPSP的段地址,接着創建一個堆棧。爲了創建這個堆棧,MS-DOSSP0000h。如果沒有分配64K內存,則要置寄存器爲比所分配的字節總數大2的值。最後,它把0000h推進棧,這是爲了保證與在早期MS-DOS版本上設計的程序的兼容性。

 

MS-DOS通過把控制傳遞偏移100h處的指令而啓動程序。程序設計者必須保證com文件的第一條指令是程序的入口點。

 

注意,因爲程序是在偏移100h處加載,因此所有代碼和數據偏移也必須相對於100h.彙編語言程序設計者可通過置程序的初值爲100h而保證這一點(例如通過在原程序的開始使用語句org 100h)。

 

下面是一個簡單的com文件Win32 ASM的例子:

 

MAN STRUCT                           ;定義一個結構

       W  dw 1234h                ;dw 也可用 word

       B  db 9 dup(?)               ;db 也可用 byte

MAN ENDS

 

.model tiny                          ;com格式文件

.data                                   ;對於com格式文件,數據段的內容會自動放到代碼段後

zz  MAN <>,<1,"abcd">,<3,"Ldf">

.code                                  ;代碼段

.startup                               ;可使下面的指令從0100H 開始(com格式文件要求)

mov ax,3031h

mov zz.W,ax                ;對結構賦值

mov zz.B,'1'

mov ax,type(MAN)       ;取結構所佔字節數

.exit                                  ;可設置返回碼

end

 

2MZ格式

com發展下去就是MZ格式的可執行文件,這是DOS所能瞭解的具有重定位功能的可執行文件格式。MZ可執行文件內含16位代碼,在這些代碼之前加了一個文件頭,文件頭中包括各種說明數據,如第一句可執行代碼執行指令時所需要的文件入口點、堆棧的位置、重定位表等,操作系統根據文件頭重的信息將代碼部分裝入內存,讓後根據重定位表修正代碼,最後在設置好堆棧後從文件頭中指定的入口開始執行。所以DOS可以把程序放在任何它想要的地方。下圖是MZ格式的可執行文件的簡單結構示意圖:

 

MZ標誌

MZ文件頭

其它信息

重定位表的字節偏移量

重定位表

重定位表

可重定位程序映像

二進制代碼

3NE格式

爲了保持對DOS的兼容性和保證Windows的需要,在Win 3.x中出現的NE格式的可執行文件中保留了MZ格式的頭(具體原因後面會說,這裏就不贅述了),同時NE文件又加了一個自己的頭,之後纔是可執行文件的可執行代碼。Win 3.x中的16Windows程序或OS/2程序都有可能是NE格式的。NE類型包括了.exe.dll.drv.fon四種類型的文件。NE格式的關鍵特性是:它把程序代碼、數據、資源隔離在不同的可加載區塊中。它也藉由符號輸入和輸出,實現所謂的執行時期動態鏈接。16位的NE格式文件裝載程序(NE Loader)讀取部分磁盤文件,並生成一個完全不同的數據結構,在內存中建立模塊。當代碼或數據需要裝入時,裝載程序必須從全局內存中分配出一塊,查找原始數據在文件的什麼地方,找到位置後再讀取原始的數據,最後再進行一些修整。還有,每一個16位的Module要負責記住現在使用的所有段選擇符,該選擇符表示該段是否已經被拋棄等等。下圖是NE格式的可執行文件的結構示意圖:

 

MS-DOS

DOS文件頭

保留區域

Windows頭偏移

DOS Stub程序

信息塊

NE文件頭

段表

資源表

駐留名錶

模塊引用表

引入名字表

入口表

非駐留名錶

代碼段和數據段

程序區

重定位表

其他:Windows可執行文件簡述(一)

      Windows可執行文件簡述(三)

=======================================================================

rivershan原創於2004年3月23日 3:38

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章