2017-01-28 8 views
-1

Итак, казалось бы, как использовать MASM за эти годы изменилось примерно 50 раз, потому что я нашел огромное количество ответов, и ни один из них не работает.Включить файлы для MASM

Что я хотел бы знать, так как вы называете что-то вроде exitprocess на MASM? Какие файлы я должен включать/где они? Я использую ml.exe, встроенный в VS2015 Community Edition. На моем корневом диске или 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

Edit: Кроме того, .INC файлы просто куча прототипов функций. Таким образом, вы можете просто прототипировать любую функцию, которую хотите, а затем использовать includeelib для ее вызова.

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

В нашем примере выше, мы называем функцию, экспортируемую kernel32.dll, поэтому мы должны включать прототипы функций из kernel32.dll. Этот файл является kernel32.inc. Если вы откроете его текстовым редактором, вы увидите, что он заполнен прототипами функций для файла kernel32.dll. Если вы не включили kernel32.inc, вы все равно можете вызвать ExitProcess, но только с простым синтаксисом вызова. Вы не сможете вызвать функцию. Дело в том, что: чтобы вызвать функцию, вы должны поместить ее прототип функции где-нибудь в исходный код. В приведенном выше примере, если вы не включили kernel32.inc, вы можете определить прототип функции для ExitProcess в любом месте исходного кода выше команды invoke, и он будет работать. Включенные файлы там, чтобы спасти вас от работы с самими прототипами, используйте их, когда можете.

.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