это правильный способ объявить прототип в MASM? - PullRequest
0 голосов
/ 06 мая 2019

Я новичок в Assembly и написал простую программу, которая ничего не делает, кроме вызова процедуры _ExitProgram, которая затем вызывает ExitProcess из Windows.

Нет ошибки компиляции, когда я помещаю _ExitProgram над основной процедурой, но когда я помещаю ее под основной процедурой, мой компилятор не может распознать функцию _ExitProgram. Я хотел бы знать, как правильно объявить процедуру. кто-нибудь, пожалуйста. Спасибо

.386

.MODEL FLAT, STDCALL

OPTION CASEMAP : NONE

;###################################################

;IMPORT FUNCTIONS

ExitProcess PROTO STDCALL, :DWORD


;LOCAL FUNCTONS

_ExitProgram PROTO STDCALL, :DWORD

;###################################################

.code

_start:

    push ebp

    mov ebp, esp 

        invoke _ExitProgram, 0

    pop ebp

    ret

end _start

;##################################################

_ExitProgram PROC STDCALL, uExitCode:DWORD

    invoke ExitProcess, uExitCode

    ret

_ExitProgram ENDP

;##################################################

END

Я использую Visual Studio 2017 и получаю следующее:

1>Assembling main.asm...

1>main.obj : error LNK2001: unresolved external symbol __ExitProgram@4

1>C:\Users\User\Documents\Visual Studio 2017\Projects\test\Debug\test.exe : 

fatal error LNK1120: 1 unresolved externals

1>Done building project "pack.vcxproj" -- FAILED.

========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
...