我正在尝试运行以下使用CRT函数printf
的简单汇编代码。
.386
.model flat, c
Sleep proto stdcall arg1:DWORD
printf proto c printlist:vararg
.data
strformat db "%s", 0Ah, 0
string1 db "Starting..",0
string2 db "Wait 5 seconds..",0
string3 db "Finishing..",0
.code
main:
invoke printf, addr strformat, addr string1
invoke printf, addr strformat, addr string2
invoke Sleep, 5000
invoke printf, addr strformat, addr string3
ret
end main
使用以下方式编译和链接:
ml /c /coff temp.asm
link /subsystem:console temp.obj kernel32.lib libcmt.lib
但是当我尝试运行它时,我收到以下错误。
runtime error R6030 - CRT not initialized
如果我将其与msvcrt.lib
相关联,则可以正常使用。问题在于CRT的静态版本。任何建议表示赞赏。感谢。
答案 0 :(得分:0)
结束主要
该语法将 main 设置为程序的入口点。您希望编写简单的“结束”,以便链接器使用默认入口点(mainCRTStartup)。并使您的主要功能公开,以便链接器可以找到它。像这样:
.code
public main
main proc
; etcetera
ret
main endp
end