我想弄明白为什么我会收到这个错误:
Unhandled exception at 0x0000007b in Project.exe: 0xC0000005: Access violation
首先,我不确定这条指令会发生什么:MOV EAX, 100
因为我已经将123存储到EAX中。当我调试程序时,它通过程序ran
运行参数后声明EAX = 100。我的问题是,MOV EAX,100
取代了123吗?
同样在程序结束时,我发现错误。是因为程序里面的mov语句。请解释......
.code
main PROC
mov EAX, 123 ;Argument
MOV EBX, 456 ;Argument
call ran
exit
main ENDP
ran PROC
push eax ;save eax
push ebx ;save ebx
mov eax, 100 ;store 100 to eax?
pop ebx
ret
exit
ran ENDP
END main
答案 0 :(得分:2)
两次推,但只有一次弹出。为什么异常发生应该是非常明显的。
push eax ;save eax
push ebx ;save ebx
mov eax, 100 ;store 100 to eax?
pop ebx
ret
如果您在堆栈上push
somthing,则必须通过手动调整堆栈或使用与之前推送的pop
相同的数量来确保堆栈平衡。在您的情况下,ret
指令将跳转到eax
最初指向的位置。
0x7b == 123 == eax