我们知道,exe 文件通常以 4D5A 或 ASCII 中的“MZ”开头。我该如何更改标题,同时仍允许文件正常工作?
现在我正在查看 ccleaner 的 exe 文件。不幸的是,我没有 10 个代表,所以我无法发布它的屏幕截图。但右侧的 ASCII 表示该程序无法以 ASCII 运行,因此导致 4D5A 无效?那么从技术上讲,我可以将 4D5A 更改为其他东西,它仍然可以工作吗?
如果这里有任何老派人士,我将非常感激他们提供有关“DOS MZ”的尽可能多的信息。
这是我正在看的图像:
答案1
我该如何更改标题同时仍允许文件正常工作?
你不能!
MZ
这个字符串(16 位表示0x5A4D
)被称为“魔法”数字是有原因的,事实上,根据 EXE/PE 规范(其根源可以追溯到 DOS 格式的可执行文件),它是必需的。所有现代的布局可移植的可执行文件如下显示(參考):
在这篇 MSDN 文章关于可移植可执行格式,MS-DOS标头详细说明:
MS-DOS 标头
每个 PE 文件都以一个小型的 MS-DOS® 可执行文件开头。对这个存根可执行文件的需求出现在 Windows 早期,当时还没有大量消费者运行它。当在没有 Windows 的机器上执行时,该程序至少可以打印出一条消息,说明运行该可执行文件需要 Windows。
PE 文件的第一个字节以传统的 MS-DOS 头开始,称为
IMAGE_DOS_HEADER
。仅有的两个重要值是e_magic
和e_lfanew
。该e_lfanew
字段包含 PE 头的文件偏移量。田野
e_magic
(一个 WORD[注意:16位]) 需要设置为值 。此值0x5A4D
有一个,名为。在 ASCII 表示中,是,这是 MS-DOS 的原始架构师之一 Mark Zbikowski 的姓名首字母。#define
IMAGE_DOS_SIGNATURE
0x5A4D
MZ
有关 Windows PE/.EXE 格式的更多信息,我强烈建议您查看Windows 可执行文件部分的x86 反汇编 Wikibook. 它包含大量有关格式的低级信息。