2017-10-21 9 views
0

x64マスクプログラムを書き込むために2015年を使用しました。エラー "アクセス違反の読み取り場所"

ExitProcess PROTO 
MessageBoxA PROTO 
.data 
    text db "Winter hat", 0Ah, "Upon my head - ", 0Ah, "My head stays warm,", 0Ah, "But my nose is red!;", 0 
    header db "Task1", 0 

.code 

main proc 

xor rcx, rcx 
mov r9b, 0 
lea rdx, text 
lea r8, header 

call MessageBoxA 

call ExitProcess 

main endp 

end 

随時私は次のエラーを取得:私のコードに誤りできる場所

Exception thrown at 0x00007FF9C65261BE (gdi32.dll) in ConsoleApplication1.exe: 0xC0000005: Access violation reading location 0xFFFFFFFFFFFFFFFF.

If there is a handler for this exception, the program may be safely continued.

あなたは明確にもらえますか?

答えて

0

このエラーは、パラメーターなしのプロシージャーを呼び出すと発生する可能性があります。 適切なエラー・メッセージを得るには、CALLの代わりにINVOKEを使用して呼び出してください。 はまた、私はあなたがこのようのparamsを置くことができるようにMessageBoxAは、ないレジスタにスタック上のパラメータが必要だと思う:

.data 
text db "your message box text", 0 
header db "message box caption",0 

.code 
start: 
push MB_OK 
push addr header 
push addr text 
push 0 
call MessageBox 

OR

invoke MessageBox, 0, addr text, addr header, MB_OK 
関連する問題