在语言处理中,什么是制作exe文件的控制台窗口?

问题描述 投票:0回答:1

当一种语言被处理以显示其输出时,特别是对于编译语言,它们的代码由编译器编译,由汇编器汇编并由链接器链接以创建可执行文件。

由于链接器通常是生成可执行文件的链接器,因此我认为它是执行控制台窗口图形布局的链接器,这是 exe 用于显示输出的内容,但是当我阅读有关链接器的更多信息时,它从未提到创建在链接之后或之前的某个时刻的控制台窗口,所以这让我想知道,哪一个使可执行二进制文件的控制台窗口的图形布局?

assembly executable linker-scripts low-level-code compiled-language
1个回答
0
投票

控制台窗口内置于 Windows 的系统服务之一中 - 这就是所有程序都具有相同控制台的原因。在 Vista 之前,它位于

csrss.exe
。从 Vista 开始,它被移至
conhost.exe
。当需要控制台时,这些程序会由 Windows 自动启动。

Windows 将在以下情况下创建控制台:

  • 您的程序通过调用 AllocConsole() 明确要求它。请注意,每个进程只能有一个 - 如果您已经有控制台,则该功能将失败。
  • 加载 EXE 文件时,如果其标头的“子系统”字段设置为“控制台”。

最后一个确实是由链接器控制的。如果您使用 Microsoft Linker (

link.exe
),则可以使用
/SUBSYSTEM
命令行参数
:

选择子系统
  • 加载 EXE 时,使用
    /SUBSYSTEM:CONSOLE
    链接您的程序将自动创建一个控制台。
  • /SUBSYSTEM:WINDOWS
    链接将不会创建控制台(但您的程序稍后仍可以使用
    AllocConsole
    创建它)
  • 不使用
    /SUBSYSTEM
    选项进行链接 - 链接器将自动决定。如果您的程序有一个名为
    main
    wmain
    的函数 - 它会将其设置为
    CONSOLE
    。如果您有
    WinMain
    wWinMain
    - 它将设置
    WINDOWS
© www.soinside.com 2019 - 2024. All rights reserved.