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

vcudknz3  于 2023-11-21  发布在  Windows
关注(0)|答案(4)|浏览(162)

**已关闭。**此问题是off-topic。目前不接受回答。
想改进这个问题吗?Update the question所以它是on-topic的堆栈溢出。

11年前关闭。
Improve this question
在最近几个版本的PE文件中,有一个存根显示给MS DOS用户的句子This program can not be run in DOS mode。为什么这样的消息仍然存在,尽管它浪费了大约38个字节?还有人使用MS-DOS吗?

agxfikkp

agxfikkp1#

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

6yjfywim

6yjfywim2#

在某个地方,有人仍然在使用DOS。而且,为了向后兼容性问题,38字节仍然需要在那里。即使没有人使用DOS。
你会惊讶地发现,Windows代码为了保持向后兼容而跳过了多少个环。

wkyowqbh

wkyowqbh3#

当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下运行”是一个更友好的消息,而不是一个通用的“这个程序与您的系统不兼容”。
DOS存根也是旧的16位Windows EXE格式的一部分存根的路径甚至是一个可设置的链接器参数,这样就可以生成一个“胖二进制文件”--Windows位是Windows程序,DOS存根是同一个程序(即相同的功能)为DOS. AFAIK,很少有人曾经利用这一点。

gzjq41n4

gzjq41n44#

虽然磁盘操作系统(DOS)是不是在使用这些天,DOS模式,基本上是命令行(或控制台模式)仍然存在,非常流行.通过DOS-MODE它可能意味着命令行模式.控制台应用程序是非常流行的,到处使用特别是在测试和开发环境.

相关问题