Windows可執行檔案簡述(三)

2021-09-30 05:07:27 字數 3139 閱讀 7646

4.le

格式在windows3.x

的時代,從

dos啟動

windows

,windows

在把機器轉到保護模式之前需要在實模式下做一些初始化。實模式的

16位**必須和

32位**一起放在可執行檔案中。舊的

dos下的可執行檔案和

ne格式的可執行檔案無法滿足這個要求,於是從

win 3.x

起到win 9x

,產生了一種新型的可執行檔案格式

le,它只適用於工作於系統底層的、同時包含

16位**和

32位**的

vxd驅動程式。

os/2 2.x

也使用le

格式。

一般而言,保護模式下的可執行檔案會在不同的

sections

中放置程式**和資料,利用可執行檔案頭中的各種屬性標誌來告訴可執行檔案載入器在面對這些

sections

時的各種細節動作。但是

vxd卻將程式**和資料混雜在段之中,通過不同段前的標識來表明該段在執行時的特性。程式**和資料之所以能夠混雜在一起,而仍然能夠有效運作,是因為

vxd所使用的平坦模式的**和平坦模式下的資料選擇器有相同的基位址與限制因素。因此不論使用上述哪乙個暫存器快取器都可以取用程式**或資料。

下圖是le格式的可執行檔案的結構示意圖: mz

檔案頭

dos檔案頭

dos stub程式

le標誌 le

檔案頭

le檔案頭

lcode

程式段pcode ……

…… 16icode

mcode

在le檔案中,**和資料被存放在幾類執行屬性不同的段中。下面是

le檔案之中一些可用的段類:

lcode:頁面鎖定的**和資料段。這種段被鎖定在記憶體裡。換句話說,這段永遠不會被放到硬碟上去,所以你一定要謹慎的使用這種段類以免浪費寶貴的記憶體。那些每時每刻都必須放在記憶體中的**和資料應該放在這個段裡。尤其是那些硬體中斷處理程式。

pcode:可調頁**段。

vmm可以對這種段實行調頁處理,在這種段裡的**不必時刻放在記憶體裡,當

vmm需要物理記憶體的時候,它就會把這段放到硬碟上去。

pdata:可調頁資料段。

icode:僅用於的初始化段。這種段裡的**僅僅用來進行

vxd的初始化。當初始化完成後,

vmm就把這段從記憶體中釋放。

dbocode:僅用於除錯的**資料段。當你要除錯

vxd程式時,就要用到這種段裡的**和資料,例如,它包含要除錯的訊息的處理**。

scode:靜態**和資料段。這種段時刻存在於記憶體中,即使

vxd已經解除安裝,這種段對某些動態的

vxd程式很有用,這些

vxd程式需要在某一

windows

程序裡不停的載入

/解除安裝而又要紀錄上次的環境和狀態。

rcode:實模式初始化**資料段。這種段包含實模式初始化需要的

16位**和資料。

16icode:保護模式初始化資料段。這是乙個

16位的段,它包含

vxd要從保護模式拷貝到

v86模式的**。例如,如果你要把一些

v86的**拷貝到乙個虛擬機器上時,你想拷貝的**就要放在這裡。如果你把它放在其他的段裡,編譯程式就會產生錯誤的**,例如,它會產生

32位**而不是

16位**。

mcode:鎖定的訊息字串。這種段包含了由

vmm訊息巨集幫助編譯的訊息字串,這有助於你構造你的驅程的國際版本。5.

pe格式

16位的程式是不健壯的,因此為了保證

windows

的健壯性,

microsoft

在microsoft windows nt 3.1

及其以後的作業系統版本,也就是所有的基於

win32

的作業系統中推出了一種新的可執行檔案的格式,也就是

pe檔案格式。

pe的意思就是

portable executable

(可移植的可執行檔案),內含

32位程式**和資料,是

unix common object file format

(coff

)的演化。

pe格式比其它格式優越的關鍵點在於它有依字母次序排列的

exports

,以及乙個可以直接將程式影像映像成虛擬記憶體的記憶體檔案對映功能。與此同時,

microsoft

也推出了新的

obj檔案和

lib檔案的格式。

pe檔案結構的總體層次分布圖如下:

dos mz header

dos

實模式存根(

stub

)程式

pe header(pe

檔案標記等)

optional header

.text section header

.bss section header

.rdata section header

……………………

.debug section header

.text section

.bss section

.rdata section

………………

.debug section

從pe開始,可執行檔案的結構開始有了正式的文件化。

microsoft

在visual c++ 6

的聯機文件(即《

msdn library visual studio 6.0

》)中給出了以

c語言描述的

pe結構,這給開發者提供了很大的方便。同時還在vc的

include

目錄裡的

winnt.h

檔案中提供

pe的各結構的定義,提供了

pe檔案中使用的原始資料結構。

Windows可執行檔案簡述(一)

作業系統中的檔案是一種抽象的機制,提供了一種在磁碟上儲存資訊而且方便以後讀取的方法。在 windows 作業系統中,乙個使用者可以最直接體會到的檔案的形式就是以 exe dll 等為副檔名的可執行檔案。伴隨著 windows 作業系統的不斷進步,其可執行檔案的格式也發生了巨大變化。這期間主要有 4個...

Windows可執行檔案簡述(二)

如果 psp中的第乙個 fcb含有乙個有效驅動器識別符號,則置al為 00h,否則為 0ffh ms dos 還置ah 為00h 或0ffh 這依賴於第二個 fcb是否含有乙個有效驅動器識別符號。建造 psp後,ms dos 在psp 後立即開始 偏移 100h 載入com 檔案,它置ss ds和e...

linux 執行可執行檔案

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