为什么PE文件中存在MS-DOS存根?

时间:2011-10-21 17:01:15

标签: windows dos stub portable-executable

在最新版本的PE文件中,有一个存根,可以为MS DOS用户显示句子This program can not be run in DOS mode。为什么这样的消息仍然存在althogh它浪费了大约38个字节?还有人还在使用MS-DOS吗?

4 个答案:

答案 0 :(得分:13)

它仍然存在,因为没有简单的方法来删除它而不破坏文件格式,似乎没有人认为每个可执行文件38个字节是值得的。部分对齐的要求几乎总是“浪费”批次,而不管怎样。

答案 1 :(得分:9)

某处某人还在使用DOS。而且,对于向后兼容性问题,仍然需要38个字节。即使没有人使用DOS。

您会惊讶地知道Windows代码跳过多少次以保持向后兼容。

答案 2 :(得分:2)

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

显然,以某种方式修改DOS加载程序以识别Windows EXE不是一种选择。并且在DOS exe头中没有“平台/体系结构”标识符,就像在PE中一样 - 没有内置机制可以用于将来引入不兼容性。此外,“这是一个Windows程序,请在Windows下运行”是一个非常友好的消息,“此程序与您的系统不兼容”。

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

答案 3 :(得分:-1)

虽然磁盘操作系统(DOS)最近没有使用,但基本上是命令行(或控制台模式)的DOS模式仍然存在且非常受欢迎。通过DOS-MODE,它可能意味着命令行模式。控制台应用程序非常受欢迎,在测试和开发环境中随处可用。