Include Files for MASM
Asked Answered
R

1

5

So it would appear how to use MASM has changed about 50 times over the years because I found a huge number of answers and not one of them works.

What I'd like to know is how do you call something like exitprocess on MASM? What files do I include/where are they? I'm using the ml.exe built into VS2015 Community Edition. There is no MASM folder on either my root drive or with VS. VS does not come with any .inc files (I ran an exhaustive search on the drive). I just want to do something simple:

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

I tried including just msvcrt.lib and this also does not work.

Readytowear answered 28/1, 2017 at 21:50 Comment(0)
R
7

Hopefully someone has a better answer, but I fixed in by installing MASM from this site. It puts the masm32 folder in the root directory (C:\ for most of us)

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

Edit: Also, the .inc files are just a bunch of function prototypes. So you could just prototype whatever function you want and then use includelib to call it.

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

In our example above, we call a function exported by kernel32.dll, so we need to include the function prototypes from kernel32.dll. That file is kernel32.inc. If you open it with a text editor, you will see that it's full of function prototypes for kernel32.dll. If you don't include kernel32.inc, you can still call ExitProcess but only with simple call syntax. You won't be able to invoke the function. The point here is that: in order to invoke a function, you have to put its function prototype somewhere in the source code. In the above example, if you don't include kernel32.inc, you can define the function prototype for ExitProcess anywhere in the source code above the invoke command and it will work. The include files are there to save you the work of typing out the prototypes yourself so use them whenever you can.

.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

But I could just as easily remove the includes:

.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
Readytowear answered 28/1, 2017 at 21:57 Comment(1)
If an executable file is composed of multiple objects linked together, do each the object's source file use includelib? It seems that it is sufficent that any one source file use includelib without using includelib in every source file.Wintergreen

© 2022 - 2024 — McMap. All rights reserved.