为什么PE文件中有MS-DOS的存根? [已关闭]

问题描述 投票:0回答:4

在 PE 文件的最新版本中,有一个存根向 MS DOS 用户显示句子

This program can not be run in DOS mode
。为什么这样的消息仍然存在,尽管它浪费了大约38个字节?还有人用 MS-DOS 吗?

windows dos stub portable-executable
4个回答
15
投票

它仍然存在,因为没有简单的方法可以在不破坏文件格式的情况下删除它,而且似乎没有人认为每个可执行文件 38 字节值得这么麻烦。无论如何,截面对齐的要求几乎总是“浪费”更多很多


10
投票

在某个地方,有人仍在使用 DOS。而且,为了向后兼容问题,38 字节仍然需要存在。即使没有人使用 DOS。

您会惊讶地发现 Windows 代码为了保持向后兼容而经历了多少麻烦。


3
投票

当 PE 格式推出时(1994 年,Windows NT 3.1),DOS 仍然很普遍。 Windows EXE 错误地从 DOS 运行的风险是非常真实的。因此他们需要使 Windows EXE 与 DOS 加载程序表面兼容。因此,在这种情况下,程序会执行某些操作(即打印消息并退出),而不是随机崩溃。

显然,以某种方式修改 DOS 加载程序以识别 Windows EXE 并不是一种选择。而且 DOS exe 标头中没有“平台/体系结构”标识符,就像在 PE 中一样 - 没有内置机制来防止将来引入不兼容性。此外,还有一些第三方 MS-DOS 兼容操作系统,带有自己的 EXE 加载程序(特别是 DR-DOS)。无论如何,“这是一个 Windows 程序,请在 Windows 下运行”是一条比一般的“此程序与您的系统不兼容”更友好的消息。一方面,它为 Windows 做广告。

DOS 存根也是旧版 16 位 Windows EXE 格式的一部分(“NE”代表“新可执行文件”)。存根的路径甚至是一个可设置的链接器参数,因此可以制作某种“胖二进制文件” - Windows 位将是您的 Windows 程序,而 DOS 存根将是相同的程序(即相同的功能)对于DOS。 AFAIK,很少有人利用过这一点。


-1
投票

虽然现在磁盘操作系统(DOS)已不再使用,但基本上是命令行(或控制台模式)的DOS模式仍然存在并且非常流行。 DOS-MODE 可能意味着命令行模式。控制台应用程序非常流行并且随处使用,尤其是在测试和开发环境中。

© www.soinside.com 2019 - 2024. All rights reserved.