在最新版本的PE文件中,有一个存根,可以为MS DOS用户显示句子This program can not be run in DOS mode
。为什么这样的消息仍然存在althogh它浪费了大约38个字节?还有人还在使用MS-DOS吗?
答案 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,它可能意味着命令行模式。控制台应用程序非常受欢迎,在测试和开发环境中随处可用。