包含 MASM 文件

Gra*_*ell 2 assembly masm visual-studio

因此,这些年来如何使用 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
Run Code Online (Sandbox Code Playgroud)

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

Gra*_*ell 5

希望有人有更好的答案,但我通过从该站点安装 MASM 进行了修复。它将 masm32 文件夹放在根目录中(对于我们大多数人来说是 C:\)

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

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

http://win32assembly.programminghorizo​​n.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
Run Code Online (Sandbox Code Playgroud)

但我可以很容易地删除包括:

.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
Run Code Online (Sandbox Code Playgroud)