2

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
4

1 に答える 1

1

つまり、ret 00Cの後にスタックをクリーンアップしますcall File.exe+333330。呼び出しの前に、3 つの 4 バイト値をスタックにプッシュしました ( eaxecx、およびの内容edx)。4 * 3 = 12 = 0xC (16 進数)。値がない場合はret、サブルーチンから返されますが、スタックはまったくクリーンアップされません。があった場合ret 4、値の 1 つだけがクリーンアップされます。ret 12またはret 0xC3つすべてを処理します。

同様の質問については、こちらを参照してください。

于 2015-09-03T04:59:37.517 に答える