2

我正在尝试运行以下使用 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 的静态版本。任何建议表示赞赏。谢谢。

4

1 回答 1

0

结束主要

该语法将main设置为程序的入口点。您想编写普通的“结束”,以便链接器使用默认入口点 (mainCRTStartup)。并公开您的主要功能,以便链接器可以找到它。像这样:

.code
public main
main proc
    ; etcetera
    ret
main endp
end
于 2012-10-05T12:53:46.427 回答