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)を使用するように、プレーンな「end」を記述します。そして、メイン関数をパブリックにして、リンカーがそれを見つけられるようにします。このような:

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