PE文件中的MZ签名是什么?

时间:2009-06-05 17:17:36

标签: c++ header portable-executable

我正在开发一个解析PE对象以获取各种信息的程序。

虽然读了规范,但我找不到MZ字节存在的原因,因为我无法在这两个字节应该代表的机器类型列表中找到它。

任何人都可以澄清吗?

6 个答案:

答案 0 :(得分:13)

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

PE二进制文件包含MZ标头的原因是为了向后兼容。如果可执行文件在基于DOS的系统上运行,它将运行MZ版本(几乎总是只是存根,表示你需要在Win32系统上运行程序)。

当然,现在这种情况并没有那么有用,因为当世界从DOS过渡到后来发生的任何事情时,它就会回归。

当时有一些程序实际上将DOS版本和Win32版本绑定在一个二进制文件中。

和大多数处理Windows历史的事情一样,Raymond Chen有一些关于这个主题的有趣文章:

答案 1 :(得分:6)

Thety是Microsoft程序员的首字母,并将该文件标识为DOS可执行文件,请参阅http://en.wikipedia.org/wiki/DOS_executable以获取更多信息。

答案 2 :(得分:3)

正如我所看到的,通过阅读wikipedia articleIczelion's PE Tutorial,只是为了保持兼容性并启用dos或HX DOS Extender来执行MZ标头旁边的某些代码。

devsource可以找到更多信息,例如MZ代表MS-DOS开发人员之一Mark Zbikowski。以及操作系统如何处理和处理来自MZ头的数据。

答案 3 :(得分:2)

在Microsoft®Windows的早期阶段,Windows™1.x,2.x和3.xx操作系统不仅存在于与Microsoft®DOS相同的卷中,而且还运行在MS-DOS操作系统之上。不仅可能,而且很可能用户可能尝试在DOS下运行某些Windows®程序。因此,Microsoft®程序员确保所有Windows®程序都有一个简单的16位DOS程序放在每个Windows可执行文件的前面,如果他们试图在DOS下运行Windows®程序,它会提醒用户。这是所有DOS“Stub”程序所做的。 资源:http://thestarman.pcministry.com/asm/debug/DOSstub.htm

答案 4 :(得分:1)

Mark Zbikowski将他的首字母缩写为原始的MS-DOS exe格式。这个签名是区分.EXE文件与DOS上更简单的.COM格式的必要条件。

每个PE文件还包含一个16位DOS程序,因此从此.EXE标头开始。该DOS程序通常会打印出“此程序需要Microsoft Windows”或类似内容。我不知道现代编译器是否仍然产生DOS存根,但PE标准仍然说PE以16位EXE头开始。

答案 5 :(得分:0)

这是dos可执行文件的“神奇数字”。你可以忽略的遗产。

Dos executable