我只是在学习 ASM/x86,所以请多多包涵。
问题
我在正在检查的程序中注意到以下内容,并且我认为它正在将参数传递给被调用的函数:
mov [ebp-04],00000005
call <some function call here>
据我所知,这似乎是将堆栈顶部的第二个字节设置为 value 5
。
这是否有效地将参数 5 传递给函数?
它会类似于以下内容C
:
void someFunction(int num); //function declaration
someFunction(5); //In some context
如果将单个参数 5 传递给函数,为什么将其设置为第二个字节(-04),而不是堆栈顶部?栈顶是什么?我解释这一切都错了吗?
编辑
函数的顶部是ebp
设置的位置:
push ebp
mov ebp,esp
push -01
push 184
mov eax,fs:[00000000]
... //bunch more pushes and movs with eax and ecx into [ebp-offset]
... //a couple of jump if equals
... //some more push and movs
lea ecx,[ebp-1C]
mov [ebp-04],00000005
call <some function>
这是被调用的函数:
mov edx,[ecx]
mov eax,[ecx+08]
sub eax,edx
test edx,edx
je <label1>
cmp eax,00000080
jna <label2>
push edx
call <another function>
add esp,04
ret
label2:
push eax
push edx
call <yet another function>
add esp,08
label1:
ret