2009-09-30 130 views
32

因此,一個.exe文件是一個可以由Windows執行的文件,但它包含了什麼?彙編語言是處理器特定的?或者某種中間語句被windows所識別,並將其轉換爲特定處理器的彙編語言?當它「執行」它時,窗口對文件做了什麼?.exe文件包含什麼內容?

回答

39

MSDN有一篇描述可執行文件結構的文章「An In-Depth Look into the Win32 Portable Executable File Format」。

基本上,一個.exe包含幾個數據塊和指令,說明如何將它們加載到內存中。其中一些部分恰好包含可以執行的機器代碼(其他部分包含程序數據,資源,重定位信息,導入信息等)

我建議您獲得Windows Internals的副本,以獲取關於發生的情況的完整說明當你運行一個exe文件時。

對於本機可執行文件,機器代碼是平臺特定的。 .exe的頭文件指出了.exe的用途。

當運行一個天然的.exe會發生以下情況(非常簡化的):

  • 過程對象被創建。
  • exe文件被讀入該進程的內存。 .exe(代碼,數據等)的不同部分分別映射並賦予不同的權限(代碼是執行的,數據是讀/寫的,常量是隻讀的)。
  • 重定位發生在.exe中(如果.exe未在其首選地址加載,則地址得到修補)
  • 導入表已散步並且加載了相關DLL。
  • DLL的映射方式與.exe相似,包含重定位發生及其依賴的DLL被加載。從DLL中導入的函數已解析。
  • 該進程在NTDLL中的初始存根處開始執行。
  • 初始加載程序存根運行每個DLL的入口點,然後跳轉到.exe的入口點。

託管的可執行文件包含MSIL(Microsoft中間語言),並且可以進行編譯,以便它們可以鎖定CLR支持的任何CPU。我不熟悉CLR加載器的內部工作原理(最初運行什麼本機代碼來引導CLR並開始解釋MSIL) - 也許別人可以詳細說明這一點。

+0

該死的,打我吧! :) – 2009-09-30 00:53:14

9

1和0的!

This wikipedia link將爲您提供有關用於Windows應用程序的便攜式可執行文件格式所需的全部信息。

+0

我剛剛低估了你的一個愚蠢的答案,直到我看到「這」實際上是一個鏈接,而不是對「1和0」的引用。希望你不要介意我是否編輯它使它更清晰 – paxdiablo 2009-09-30 01:43:14

+5

在我的日子裏,我們沒有1s我們必須做0s – 2011-12-20 17:08:57

12

我可以告訴你.exe文件中的前兩個字節包含 - 'MZ'。我的意思是人物'MZ'。

它實際上代表:Mark Zbikowski。那個設計exe文件格式的人。

http://en.wikipedia.org/wiki/Mark_Zbikowski

+4

可愛和有趣的(我肯定會跟隨該鏈接),但不與手頭的問題非常相關。 – Twisol 2009-09-30 01:06:04

+0

是的,雖然是一個有趣的代碼片段,但它只能解釋PE文件的前兩個字節。這不是很多,百分比。 – paxdiablo 2009-09-30 02:06:20

+0

出於好奇:他是否爲微軟設計過它? – MasterMastic 2015-03-13 17:09:49

1

的EXE文件確實是一種被稱爲可移植可執行文件。它包含二進制數據,可以被處理器讀取並執行(基本上是x86指令。)還有一個很多標題數據和其他雜項內容。實際的可執行代碼位於名爲.text的部分,並作爲機器指令(與處理器相關)存儲。該代碼(以及.EXE的其他部分)被放入內存,並且CPU被髮送到它,它開始執行。 (請注意,實際發生的接口更多,這是一個簡單的解釋)。