回答
MZ簽名是由MS-DOS可重定位的16位EXE格式使用的簽名。
PE二進制包含MZ頭的原因是爲了向後兼容。如果可執行文件在基於DOS的系統上運行,它將運行MZ版本(幾乎總是隻是存根表示需要在Win32系統上運行該程序)。
當然,這並不像時下非常有用,因爲它是回來時,世界正從DOS過渡到任何要跟從它。
當時沒有任何將一個DOS版本和Win32版本實際上結合在一個單一的二進制數的程序。
此外,與大多數事情處理了Windows歷史,雷蒙德陳有關於這個問題的一些有趣的文章:
這是dos可執行文件的「幻數」。遺留的東西,你可以忽略。
在我看來,通過閱讀wikipedia article和Iczelion's PE Tutorial,它的存在只是爲了保持兼容性,使DOS或HX DOS擴展到下一個執行某些代碼到MZ頭。
從devsource一個可以找到更多的信息,如MZ代表馬克·茨柏克沃斯基的MS-DOS的開發商之一。以及操作系統如何運行並處理來自MZ標頭的數據。
Thety是微軟程序員的聲母和文件識別爲一個DOS可執行看到http://en.wikipedia.org/wiki/DOS_executable了一點更多的信息。
Mark Zbikowski把自己的名字縮寫成原來的MS- DOS exe格式。這個簽名對於在DOS上區分.EXE文件和簡單的.COM格式是非常必要的。
每個PE文件還包含一個16位的DOS程序,因此從這個.EXE頭開始。這個DOS程序通常會打印出「這個程序需要Microsoft Windows」或類似的東西。我不知道現代編譯器是否仍然生成DOS存根,但PE標準仍然說PE以16位EXE頭開頭。
如果它沒有dos存根,那麼它不是一個有效的PE/COFF,因爲DOS標頭中有一個字段告訴PE標頭的起始位置。 – 2009-06-05 18:52:03
在微軟的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
- 1. 爲什麼PE文件中的MZ DOS標頭簽名0x54AD?
- 2. 什麼是PE頭文件中的CheckSum?
- 3. .F4V的文件簽名是什麼?
- 4. .Net PE文件中的入口點RVA是什麼?
- 5. .NET框架中的.PE文件是什麼?
- 6. 什麼是/ cdn-cgi/pe/bag2?
- 7. PE文件中籤名地址轉換的說明
- 8. 簽名jar文件時簽名文件(* .SF)的用途是什麼?
- 9. PE/COFF文件擴展名
- 10. PE文件部分名稱
- 11. 什麼領域的PE頭文件告訴你是否一個有效的PE文件?
- 12. Windows如何將pe文件鏈接到目錄文件中的簽名?
- 13. ClickOnce簽名 - 實際簽名是什麼?
- 14. PE文件格式 - 節表和第一節之間是什麼?
- 15. 確定MZ EXE結束的位置,並且LE/LX/PE開始
- 16. 爲什麼Java Web Start說簽名的jar文件是未簽名的?
- 17. 什麼是類文件名中的$ 1?
- 18. 什麼是文件名
- 19. 什麼是PHP中的參數簽名?
- 20. java中的jar簽名是什麼?
- 21. 什麼是::在簽名中的含義?
- 22. connect/expressjs中的「簽名」cookie是什麼?
- 23. 什麼是簽名提交?
- 24. Dropbox OAuth簽名是什麼?
- 25. 密碼保護的ZIP文件的字節簽名是什麼?
- 26. 如何獲得PE文件簽名抵消?
- 27. PE文件中的COM_DESCRIPTOR
- 28. Android - IntelliJ簽名應用程序的debug.keystore文件是什麼?
- 29. 在Windows中籤名exe是什麼?
- 30. 爲什麼WinVerifyTrust和sigcheck不同意文件是否有簽名?
有關MZ標題的起源(MS-DOS開發人員Mark Zbikowski的縮寫)的一些歷史信息,您可能需要查看wikipedia:http://en.wikipedia.org/wiki/DOS_executable – none 2009-06-05 20:59:01