私はちょうど ASM/x86 を学んでいるので、ご容赦ください。
質問
調べているプログラムで次のことに気付きました。呼び出される関数にパラメーターを渡していると思います。
mov [ebp-04],00000005
call <some function call here>
私が知る限り、これはスタックの先頭から 2 番目のバイトを value に設定しているようです5
。
これは効果的に 5 のパラメーターを関数に渡していますか?
の次のようになりますかC
?
void someFunction(int num); //function declaration
someFunction(5); //In some context
関数に 5 の 1 つのパラメーターを渡す場合、スタックの一番上ではなく、2 番目のバイト (-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