错误"访问违规读取位置"

时间:2017-10-21 15:36:34

标签: masm

我使用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。

     

如果存在此异常的处理程序,则程序可能是安全的   继续进行。

你能否澄清我的代码中哪些错误?

1 个答案:

答案 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