ret は何をしますか? ここで ret 0xC が必要なのはなぜですか? ret 0xC または 0x4 ではなく、単に ret であった場合はどうなるでしょうか。
mov eax,[esp+10] // param3
mov ecx,[esp+0C] // param2
mov edx,[esp+08] // param1
push eax
push ecx
push edx
mov ecx,esi
call File.exe+333330
pop esi
ret 000C
つまり、ret 00C
の後にスタックをクリーンアップしますcall File.exe+333330
。呼び出しの前に、3 つの 4 バイト値をスタックにプッシュしました ( eax
、ecx
、およびの内容edx
)。4 * 3 = 12 = 0xC (16 進数)。値がない場合はret
、サブルーチンから返されますが、スタックはまったくクリーンアップされません。があった場合ret 4
、値の 1 つだけがクリーンアップされます。ret 12
またはret 0xC
3つすべてを処理します。
同様の質問については、こちらを参照してください。