【问题标题】:How to remove console in masm assembly?如何在 masm 组件中移除控制台?
【发布时间】:2014-07-25 01:35:15
【问题描述】:

我是汇编新手,我运行的每个程序都会在后台打开一个控制台(如 cmd)。有没有办法解决这个问题,因为它很烦人?

我正在使用 masm 程序集,但我不确定这是什么意思。

.386
.model flat,stdcall
option casemap:none

include \masm32\include\windows.inc
include \masm32\include\user32.inc
include \masm32\include\kernel32.inc

includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib

.data

boxcap db "A simple box", 0
message db "<3 Madi",0
abort db "ABORT",0



.code
start: 
    invoke MessageBox,
                        NULL,
                        addr message,
                        addr boxcap,
                        MB_ICONERROR OR MB_ABORTRETRYIGNORE

    .IF eax==IDABORT
        invoke MessageBox, NULL, addr abort, addr abort, MB_OK
    .ELSEIF eax==IDRETRY
        invoke MessageBox, NULL, addr abort, addr abort, MB_OK 
    .ELSEIF eax == IDCANCEL

    .ENDIF

    invoke ExitProcess,NULL

end start

这是代码,抱歉没有早点发布。

【问题讨论】:

  • 如果你不向我们展示你在做什么,就不可能看到可能出了什么问题。我们无法调试我们看不到的东西,而且您没有提供任何信息。 (你基本上是在说“医生,我在某个地方感到疼痛。我的物种是人类。出了什么问题,我该如何让它停止?”。问你自己的医生这个问题,看看你是否得到了基于诊断和治疗关于问题的模糊解释。我敢打赌,如果没有更多的信息,你的医生也不会愿意给你的。)“masm”是“Microsoft Assembler”(基于 .asm扩展名)。

标签: assembly masm


【解决方案1】:

您需要将/SUBSYSTEM:WINDOWS 选项传递给链接器。如果您使用 ML 命令链接,请将 /link /SUBSYSTEM:WINDOWS 添加到命令行末尾。

如果您不使用/ENTRY 选项,则使用/SUBSYSTEM 选项会更改Microsoft 链接器选择默认入口点的方式。 rules for this 有点复杂,但如果您之前使用的是 mainCRTStartup,则可能需要将其更改为 WinMainCRTStartup

哦,MASM代表Macro Assembler,它的全称是Microsoft Macro Assembler。曾经有一个 ASM 汇编器不支持宏。

【讨论】:

  • 好的,我的编译脚本是一个批处理文件,设置为:\masm32\bin\ml /c /Zd /coff Msgbox.asm \masm32\bin\Link /SUBSYSTEM:CONSOLE Msgbox.obj我应该改变什么?抱歉,我是组装新手。无论您现在是否回复,都感谢您的回答。
  • 在批处理文件中将 /SUBSYSTEM:CONSOLE 更改为 /SUBSYSTEM:WINDOWS
  • 谢谢罗斯!抱歉我没有早点看到。现在可以完美运行了。
猜你喜欢
  • 2015-11-21
  • 2011-08-17
  • 2012-05-01
  • 2012-10-30
  • 1970-01-01
  • 1970-01-01
  • 2021-12-10
  • 2011-02-28
相关资源
最近更新 更多