在检查 Win32 可执行文件时,我发现它们包含字符串This program cannot be run in DOS mode
,这正是这些可执行文件在 DOS 模拟器(如 DOSBox)中运行时打印的内容。
这使我得出结论,可执行文件有两条路径 - 一条由 DOS 占用(导致显示上述消息),另一条由 Windows 占用,导致主程序运行。
这“两条路径”究竟是如何实现的?
答案1
简短的回答:每个 EXE 文件都以 DOS 可执行文件开头。
长答案:
MS-DOS 标头
每个 PE 文件都以一个小型的 MS-DOS® 可执行文件开头。对这个存根可执行文件的需求出现在 Windows 早期,当时还没有大量消费者运行它。当在没有 Windows 的机器上执行时,该程序至少可以打印出一条消息,说明运行该可执行文件需要 Windows。
参考:2002 年 2 月 MSDN 杂志 Inside Windows -深入了解 Win32 可移植可执行文件格式
Windows 程序加载器只是忽略了这个存根。DOS 像加载和运行任何其他 DOS 可执行文件一样加载和运行它。