我需要知道我是否还没有完全理解如何将参数传递给程序,因为我必须知道它是否是导致程序出现问题的原因。
假设我有两个DWORD变量,名为var1和var2。我想调用一个名为addtwo的函数,与本书中的示例相同。但我也想在其中调用一个名为addtwo2的函数(单独以避免递归)使用完全相同的变量。在主要的,我会这样做
push OFFSET var1
push OFFSET var2
call addtwo
然后在addtwo中,执行此操作
push ebp
mov ebp, esp
并调用第一个var,我会[esp + 8]和第二个var [esp + 12]。 现在,假设我想将这些传递给addtwo2。我会做与main相同的事情吗?
push OFFSET var1
push OFFSET var2
call addtwo2
然后在addtwo2中,执行
push ebp
mov ebp, esp
并使用相同的[esp + 8和12]来调用特定的变量?然后,在每个结束时,放入ret清除堆栈?
答案 0 :(得分:1)
对你的问题的简短回答:是的。
使用push
和call
以及pop
和ret
,您可以向下和向上更改堆栈指针(ESP
)。因此,ESP
addtwo2
中的ESP
“与”addtwo1
中的{{1}}相同,并不是“相同的内存位置 - 即不是同一个变量”。