【问题标题】:Why is "This program cannot be run in DOS mode" text present in .dll files?为什么 .dll 文件中出现“此程序无法在 DOS 模式下运行”文本?
【发布时间】:2017-11-16 16:45:55
【问题描述】:

最近我在编译原生 C++ DLL 项目时打开了一个由 Visual Studio 9 生成的 .dll 文件,很惊讶地看到开头附近的“此程序无法在 DOS 模式下运行”文本。

为什么 .dll 文件中有此文本?

【问题讨论】:

    标签: windows visual-c++


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      Portable Executable 格式规范声明如下:

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

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

      【讨论】:

        【解决方案3】:

        在 DOS 模式下运行的 Win32 程序(即单用户,无图形)打印该文本。如果您尝试在不运行 Windows 的情况下使用 DLL,则 DLL 也可能会打印该消息。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-02-11
          • 2019-08-20
          • 1970-01-01
          • 1970-01-01
          • 2021-10-24
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多