在后台运行程序 - 汇编语言

时间:2013-06-26 21:02:28

标签: assembly x86 tasm

如果我用汇编语言构建程序,如何强制它在后台运行(没有任何控制台)?该计划是无止境的,所以控制台一直出现..

是否有解决方案或某些让我这样做的中断? 谢谢大家。

编辑:我正在使用Tasm Compiler,&我的操作系统是Windows 7(32位)

3 个答案:

答案 0 :(得分:3)

如果您不想拥有控制台窗口,则必须将程序与/SUBSYSTEM:WINDOWS相关联 您可以参考MSDN了解各种选项。

但这并不是一个与汇编相关的问题,因为这同样适用于您创建的任何其他可执行文件。

答案 1 :(得分:2)

这方面的诀窍是您需要创建Windows应用程序而不是控制台应用程序。使用最小的示例应用程序可以最好地证明如何做到这一点。

我们首先设置内存模型。

.386
.model flat

然后我们包含windows.inc,它允许我们访问API调用中可能需要的各种常量。如果您没有对Windows API做太多工作,那么您将不需要这个。

include windows.inc

接下来,我们为要调用的函数添加externs。至少你需要致电ExitProcess。在这个例子中,我们也打算调用MessageBoxA,这样我们就可以看到应用程序做了什么。

extrn ExitProcess : near
extrn MessageBoxA : near

接下来是一个带有消息框“Hello World”消息的数据段。

.data
  hello db "Hello World!",0

最后是代码。它只需要调用MessageBoxA来显示消息,然后调用ExitProcess来退出应用程序。

.code

start:

  push MB_ICONHAND or MB_OKCANCEL
  push offset hello
  push offset hello
  push 0  
  call MessageBoxA        

  push 0
  call ExitProcess

end start

假设您已将此代码保存在文件 wintest.asm 中,则可以使用以下命令行对其进行编译:

tasm32 /ml wintest.asm

/ml选项指定您要使用区分大小写的符号。如果没有它,链接器将找不到Windows函数调用。

如果您收到有关无法找到 windows.inc 包含文件的错误,则可能还需要在{Borner include目录的路径中包含/i选项。

最后,您使用以下命令行进行链接:

ilink32 wintest.obj,,,import32.lib,,

import32.lib是一个导入库,可将您的代码链接到Windows API。

假设所有内容都已成功编译和链接,您现在应该有一个名为 wintest.exe 的Windows应用程序,该应用程序在运行时会弹出一个消息框,但不会打开控制台窗口。< / p>

答案 2 :(得分:1)

如果您使用的是Linux / Unix,请使用daemonize