Windows可執行檔案簡述(二)

2021-09-30 05:07:27 字數 2683 閱讀 2447

如果

psp中的第乙個

fcb含有乙個有效驅動器識別符號,則置al為

00h,否則為

0ffh

。ms-dos

還置ah

為00h

或0ffh

,這依賴於第二個

fcb是否含有乙個有效驅動器識別符號。 建造

psp後,

ms-dos

在psp

後立即開始(偏移

100h

)載入com

檔案,它置ss、

ds和es為

psp的段位址,接著建立乙個堆疊。為了建立這個堆疊,

ms-dos置sp

為0000h

。如果沒有分配

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              

;可設定返回碼

end2.mz

格式com

發展下去就是

mz格式的可執行檔案,這是

dos所能了解的具有重定位功能的可執行檔案格式。

mz可執行檔案內含

16位**,在這些**之前加了乙個檔案頭,檔案頭中包括各種說明資料,如第一句可執行**執行指令時所需要的檔案入口點、堆疊的位置、重定位表等,作業系統根據檔案頭重的資訊將**部分裝入記憶體,讓後根據重定位表修正**,最後在設定好堆疊後從檔案頭中指定的入口開始執行。所以

dos可以把程式放在任何它想要的地方。下圖是

mz格式的可執行檔案的簡單結構示意圖: mz

標誌 mz檔案頭

其它資訊

重定位表的位元組偏移量

重定位表

重定位表

可重定位程式映像

二進位制**

3.ne格式

為了保持對

dos的相容性和保證

windows

的需要,在

win 3.x

**現的

ne格式的可執行檔案中保留了

mz格式的頭(具體原因後面會說,這裡就不贅述了),同時

ne檔案又加了乙個自己的頭,之後才是可執行檔案的可執行**。

win 3.x

中的16

位windows

程式或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 作業系統中,乙個使用者可以最直接體會到的檔案的形式就是以 exe dll 等為副檔名的可執行檔案。伴隨著 windows 作業系統的不斷進步,其可執行檔案的格式也發生了巨大變化。這期間主要有 4個...

Windows可執行檔案簡述(三)

4 le 格式在windows3.x 的時代,從 dos啟動 windows windows 在把機器轉到保護模式之前需要在實模式下做一些初始化。實模式的 16位 必須和 32位 一起放在可執行檔案中。舊的 dos下的可執行檔案和 ne格式的可執行檔案無法滿足這個要求,於是從 win 3.x 起到w...

linux 執行可執行檔案

1 首先,需要了解一下a.out這個目標檔案。a.out在linux下是elf executable linkable format 檔案格式,該目標檔案由乙個檔案頭 段 資料段 已初始化 從定位資訊區 符號表及符號名字字串構成,如下左圖所示,經過鏈結後生成執行檔案如下右圖所示,需要說明的是1 bs...