X86 windows MASM程序中堆栈的使用
我在WinAsm Studio中编写简单的MASM应用程序,遇到堆栈问题。X86 windows MASM程序中堆栈的使用,x86,masm32,X86,Masm32,我在WinAsm Studio中编写简单的MASM应用程序,遇到堆栈问题。 我已经能够在这个非常简单的程序中重新创建它: .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 user3
我已经能够在这个非常简单的程序中重新创建它:
.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
在本例中,我试图在一个过程(aProc
)中将一些值放入堆栈,然后在另一个过程(bProc
)中检索它们
你能解释一下为什么这个代码会导致程序崩溃(
访问冲突
)以及如何正确使用堆栈吗?push 1后跟ret将尝试返回位置1。start还需要ret指令或某种类型的OS exit调用。在本例中,我跳过了start的ret以使其更简单。已经修复。关于第一件事:这是否意味着我不能在过程中使用堆栈?可以,但返回地址也在堆栈上,所以必须考虑这一事实。你可以先把它放在寄存器中,推送你的值,然后把它推回到栈顶,然后你可以重新调用。你的问题是:你不理解一个函数的概念。堆栈是后进先出数据类型。