MASM的包含文件

5
似乎多年来如何使用MASM已经改变了大约50次,因为我找到了很多答案,但没有一个是有效的。
我想知道的是如何在MASM上调用exitprocess?我应该包含哪些文件/它们在哪里?我正在使用VS2015 Community版内置的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个回答

7
希望有更好的答案,但我通过从这个网站安装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,你可以在调用命令之前的源代码中任何地方定义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

如果一个可执行文件由多个链接在一起的对象组成,那么每个对象的源文件是否都要使用includelib呢?似乎只需要任何一个源文件使用includelib就足够了,而不必在每个源文件中都使用includelib - rosshjb

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接