为什么.dll文件中存在"此程序无法在DOS模式下运行"文本?

sha*_*oth 11 windows visual-c++

最近我在编译本机C++ DLL项目的同时打开了由Visual Studio 9生成的.dll文件,并且惊讶地看到"该程序无法在DOS模式下运行"文本开头附近.

为什么在.dll文件中有这个文本?

lex*_*exu 10

dll非常类似于具有不同扩展名的可执行文件.您看到的文本是Windows上"标准"可执行文件头的一部分.它曾被用于优雅地中止从DOS运行Windows可执行文件的尝试.


Pet*_*ček 9

Portable Executable 格式规范声明如下:

MS-DOS 存根是在 MS-DOS 下运行的有效应用程序。它位于 EXE 图像的前面。链接器在此处放置一个默认存根,它会打印出消息“此程序不能在 DOS 模式下运行”。当图像在 MS-DOS 中运行时。用户可以使用 /STUB 链接器选项指定不同的存根。

在位置 0x3c,存根具有到 PE 签名的文件偏移量。此信息使 Windows 能够正确执行映像文件,即使它具有 MS-DOS 存根。在链接期间,此文件偏移量位于位置 0x3c。