汇编,将参数传递给过程

时间:2014-04-30 00:14:56

标签: assembly stack arguments masm

我需要知道我是否还没有完全理解如何将参数传递给程序,因为我必须知道它是否是导致程序出现问题的原因。

假设我有两个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清除堆栈?

1 个答案:

答案 0 :(得分:1)

对你的问题的简短回答:是的。

使用pushcall以及popret,您可以向下和向上更改堆栈指针(ESP)。因此,ESP addtwo2中的ESP“与”addtwo1中的{{1}}相同,并不是“相同的内存位置 - 即不是同一个变量”。