2009-06-05 372 views
6

我正在研究一個解析PE對象以獲取各種信息的程序。PE文件中的MZ簽名是什麼?

讀取規格,雖然,我不能找出爲什麼MZ字節在那裏,因爲我無法找到此,這些2個字節應該代表機種的名單上。

任何人都可以澄清?

回答

12

MZ簽名是由MS-DOS可重定位的16位EXE格式使用的簽名。

PE二進制包含MZ頭的原因是爲了向後兼容。如果可執行文件在基於DOS的系統上運行,它將運行MZ版本(幾乎總是隻是存根表示需要在Win32系統上運行該程序)。

當然,這並不像時下非常有用,因爲它是回來時,世界正從DOS過渡到任何要跟從它。

當時沒有任何將一個DOS版本和Win32版本實際上結合在一個單一的二進制數的程序。

此外,與大多數事情處理了Windows歷史,雷蒙德陳有關於這個問題的一些有趣的文章:

+4

有關MZ標題的起源(MS-DOS開發人員Mark Zbikowski的縮寫)的一些歷史信息,您可能需要查看wikipedia:http://en.wikipedia.org/wiki/DOS_executable – none 2009-06-05 20:59:01

0

這是dos可執行文件的「幻數」。遺留的東西,你可以忽略。

Dos executable

2

在我看來,通過閱讀wikipedia articleIczelion's PE Tutorial,它的存在只是爲了保持兼容性,使DOS或HX DOS擴展到下一個執行某些代碼到MZ頭。

devsource一個可以找到更多的信息,如MZ代表馬克·茨柏克沃斯基的MS-DOS的開發商之一。以及操作系統如何運行並處理來自MZ標頭的數據。

1

Mark Zbikowski把自己的名字縮寫成原來的MS- DOS exe格式。這個簽名對於在DOS上區分.EXE文件和簡單的.COM格式是非常必要的。

每個PE文件還包含一個16位的DOS程序,因此從這個.EXE頭開始。這個DOS程序通常會打印出「這個程序需要Microsoft Windows」或類似的東西。我不知道現代編譯器是否仍然生成DOS存根,但PE標準仍然說PE以16位EXE頭開頭。

+0

如果它沒有dos存根,那麼它不是一個有效的PE/COFF,因爲DOS標頭中有一個字段告訴PE標頭的起始位置。 – 2009-06-05 18:52:03

2

在微軟的Windows的早期,在Windows™的1.x,2.x和3.xx的操作系統在同一個卷作爲微軟DOS不僅存在,而且還運行在一個MS-DOS的頂部OS。這不僅是可能的,而且用戶很可能會試圖在DOS下運行一些Windows®程序。因此,Microsoft®程序員確保所有Windows®程序都將在每個Windows可執行文件的前端放置一個簡單的16位DOS程序,以便在用戶嘗試在DOS下運行Windows®程序時提醒用戶。這是所有DOS「存根」程序所做的。 資源:http://thestarman.pcministry.com/asm/debug/DOSstub.htm