Windows可執行檔案簡述(一)

2021-04-12 23:32:44 字數 2669 閱讀 3496

作業系統中的檔案是一種抽象的機制,提供了一種在磁碟上儲存資訊而且方便以後讀取的方法。在

windows

作業系統中,乙個使用者可以最直接體會到的檔案的形式就是以

.exe

、.dll

等為副檔名的可執行檔案。伴隨著

windows

作業系統的不斷進步,其可執行檔案的格式也發生了巨大變化。這期間主要有

4個過程:

dos中出現的最簡單的以

.com

為副檔名的可執行檔案和以

.exe

為副檔名的

mz格式(mz是

mz格式的主要作者

mark zbikowski

的名字的縮寫

)的可執行檔案,

win 3.x

下出現的ne(

new executable

:分段可執行檔案)格式的

.exe

和.dll

檔案,win 3.x

和win9x

所專有的le(

linear executable

:線性可執行檔案,專用於

vxd檔案),

win9x

和win nt/2000/xp

下的32

位的可執行檔案pe(

portable executable

:可移動的可執行檔案)。這裡面

com、mz和

ne屬於

win16,pe

屬於win32,le

可以相容

win16

和win32。 

在乙個作業系統中,可執行的**最終被裝入記憶體執行之前是以檔案的方式存放在磁碟中的,也就是以可執行檔案的方式。下面是

microsoft windows

作業系統中的可執行檔案的概述。1.

com格式

windows

下最簡單的可執行檔案就是

dos下的以

.com

為副檔名的

com檔案。

com檔案是舊有的只有

64kb

記憶體的cp/m

機器的產物。

com格式檔案最大

64k,

com檔案內含

16位程式的二進位制**映像,沒有重定位資訊。

com檔案包含程式的二進位制**的乙個絕對映像。也就是說,為了執行程式準確的處理器指令和記憶體中的資料,

ms-dos

通過直接把該映像從檔案拷貝到記憶體而載入

com程式;它不作任何改變。

為載入乙個

com程式,

ms-dos

首先試圖分配記憶體,因為

com程式必須位於乙個

64k的段中,所以

com檔案的大小不能超過

65,024

(64k

減去用於

psp的

256位元組和用於乙個起始堆疊的至少

256位元組)。如果

ms-dos

不能為程式、乙個

psp、乙個起始堆疊分配足夠記憶體,則分配嘗試失敗。否則,

ms-dos

分配盡可能多的記憶體(直至所有保留記憶體)。即使

com程式本身不能大於

64k。在試圖執行另乙個程式或分配另外的記憶體之前,大部分

com程式釋放任何不需要的記憶體。

分配記憶體後,

ms-dos

在該記憶體的頭

256位元組建立乙個

psp(

program segment prefix

,程式段字首),

psp結構如下:偏移

大小(byte)

說明0000h 02

中斷20h

0002h 02

以節計算的記憶體大小(利用這個可看出是否感染引導型病毒)

0004h 01

保留0005h 05

至dos的長呼叫

000ah 02

int 22h

入口ip

000ch 02

int 22h

入口cs

000eh 02

int 23h

入口ip

0010h 02

int 23h

入口cs

0012h 02

int 24h

入口ip

0014h 02

int 24h

入口cs

0016h 02

父程序的

psp段值(可測知是否被跟蹤)

0018h 14

存放20個

soft號

002ch 02

環境塊段位址(從中可獲知執行的程式名)

002eh 04

存放使用者棧位址指標

0032h 1e

保留0050h 03

dos呼叫(int 21h / retf)

0053h 02

保留0055h 07

擴充套件的fcb頭

005ch 10

格式化的

fcb1

006ch 10

格式化的

fcb2

007ch 04

保留0080h 80

命令列引數長度

0081h

127命令列引數

Windows可執行檔案簡述(二)

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

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...