包含 MASM 的文件

Posted

技术标签:

【中文标题】包含 MASM 的文件【英文标题】:Include Files for MASM 【发布时间】:2017-01-28 21:50:05 【问题描述】:

因此,这些年来如何使用 MASM 似乎已经改变了大约 50 次,因为我发现了大量的答案,但没有一个有效。

我想知道的是,您如何在 MASM 上调用诸如 exitprocess 之类的东西?我包括哪些文件/它们在哪里?我正在使用 VS2015 社区版中内置的 ml.exe。我的根驱动器或 VS 上都没有 MASM 文件夹。 VS 不附带任何 .inc 文件(我在驱动器上进行了详尽的搜索)。我只想做一些简单的事情:

.386
.model flat, stdcall 
option casemap:none 
includelib ?????????????
include ?????????????
.data 
.code 
start: 
    invoke ExitProcess,0 
end start

我尝试只包含 msvcrt.lib,但这也不起作用。

【问题讨论】:

【参考方案1】:

希望有人有更好的答案,但我通过从该站点安装 MASM 解决了问题。它将 masm32 文件夹放在根目录(我们大多数人是 C:\)

http://www.masm32.com/download.htm

编辑:另外,.inc 文件只是一堆函数原型。所以你可以对任何你想要的函数进行原型化,然后使用 includelib 来调用它。

http://win32assembly.programminghorizon.com/tut2.html

在上面的示例中,我们调用了 kernel32.dll 导出的函数,因此我们需要包含 kernel32.dll 中的函数原型。该文件是 kernel32.inc。如果你用文本编辑器打开它,你会看到它充满了 kernel32.dll 的函数原型。如果您不包含 kernel32.inc,您仍然可以调用 ExitProcess,但只能使用简单的调用语法。您将无法调用该函数。这里的重点是:为了调用一个函数,你必须把它的函数原型放在源代码的某个地方。在上面的例子中,如果你不包含kernel32.inc,你可以在invoke命令上面的源代码中的任何地方定义ExitProcess的函数原型,它就会起作用。包含文件可以为您节省自己输入原型的工作,因此请尽可能使用它们。

.386 
.model flat, stdcall 
option casemap:none 
include C:\masm32\include\windows.inc 
include C:\masm32\include\kernel32.inc 
includelib C:\masm32\lib\kernel32.lib 
.data 
.code 
start: 
    invoke ExitProcess,0 
end start

但我也可以轻松删除包含:

.386 
.model flat, stdcall 
option casemap:none
includelib C:\masm32\lib\kernel32.lib 
.data 
.code 
start: 
    ExitProcess PROTO STDCALL :DWORD
    invoke ExitProcess,0 
end start

【讨论】:

以上是关于包含 MASM 的文件的主要内容,如果未能解决你的问题,请参考以下文章

dosbox,masm的挂载

masm32链接器不会创建可执行文件

MASM32使用教程

在 MASM 8086 程序集中读取多个文件

在MASM中使用32位寄存器而不更改默认段定义大小

错误 A2105:预期:指令或指令程序集