I'm writing simple MASM application in WinAsm Studio and I encountered a problem with the stack.
I've been able to recreate it in this very simple program:
.386
.model flat, stdcall
OPTION CASEMAP:NONE
Include windows.inc
Include kernel32.inc
Include masm32.inc
include user32.inc
IncludeLib kernel32.lib
IncludeLib masm32.lib
IncludeLib user32.lib
.code
aProc proc near
push 1
ret
aProc endp
bProc proc near
pop edx
ret
bProc endp
start:
call aProc
call bProc
invoke ExitProcess, 0
end start
What I'm trying to do in this example is to put a few values onto the stack in one procedure (aProc) and then retrieve them in another procedure (bProc).
Can you explain to me why this code causes the program to crash (Access violation) and how to use the stack properly?