Project.exe中0x0000007b处的未处理异常:0xC0000005:访问冲突

时间:2014-05-06 07:56:53

标签: assembly compiler-construction masm masm32

我想弄明白为什么我会收到这个错误:

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

1 个答案:

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