我使用vs 2015来编写x64 masm程序。
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
我不时会收到下一个错误:
在0x00007FF9C65261BE(gdi32.dll)中抛出异常 ConsoleApplication1.exe:0xC0000005:访问冲突读取位置 0xFFFFFFFFFFFFFFFF。
如果存在此异常的处理程序,则程序可能是安全的 继续进行。
你能否澄清我的代码中哪些错误?
答案 0 :(得分:0)
当您调用不带参数的过程时,可能会发生此错误, 最好用INVOKE而不是CALL调用它们以获得正确的错误消息。 另外我认为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