程序中的程序集错误,堆栈内的地址指针异常



我在汇编中有以下代码:

.686
.model flat, stdcall
.stack 4096
ExitProcess proto, dwExitCode : dword
.data
Temporal DWORD ?
mdc_result DWORD ?
.code
main PROC
push ebp
mov ebp, esp 
push 120
push 25
call MCD_iterativo
pop ebp
ret 0
main ENDP
MCD_iterativo PROC ; a = 4, b = 8
push ebp
mov ebp, esp
jmp L2
pop ebp
ret 
MCD_iterativo ENDP
L2:
cmp DWORD PTR [ebp + 8], 0
je L1
mov eax, DWORD PTR [ebp + 8]
mov DWORD PTR Temporal, eax 
mov eax, DWORD PTR [ebp + 12]
cdq
idiv DWORD PTR [ebp + 8]
mov DWORD PTR [ebp + 8], edx
mov ecx, DWORD PTR Temporal
mov DWORD PTR [ebp + 12], ecx
jmp L2
L1:
mov eax, DWORD PTR [ebp + 12]
pop ebp
ret 0
END main

我得到以下错误:Exception occurred at 0x00000005 in ASM_Miercoles_Semana10.exe: 0xC0000005: Access violation when executing location 0x00000005.我试着做了一个add进入esp和ebp变量以恢复初始地址,但它不知道,我只想在没有错误的情况下完成程序我正在尝试实现两个函数,第二个函数里面有一个while,循环工作得很好,最后我在主PROC 的ret中有错误

最好的解决方案是在Visual Studio中调试代码。基本上,循环[L1,L2]之间的代码在某个时刻会脱离程序堆栈的约束,进入操作系统的受限区域。当这种情况发生时,操作系统会崩溃程序,因为您不被允许访问这些信息。

最新更新