を使用するには:RET、RETN、RETF - 私は、次のasmコードを持っているか、彼らに
; int __stdcall wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdLine, int nShowCmd)
[email protected] proc near
var_8= dword ptr -8
var_4= dword ptr -4
hInstance= dword ptr 8
hPrevInstance= dword ptr 0Ch
lpCmdLine= dword ptr 10h
nShowCmd= dword ptr 14h
push ebp
mov ebp, esp
sub esp, 8
mov [ebp+var_4], 5
mov eax, [ebp+var_4]
add eax, 1
mov [ebp+var_8], eax
xor eax, eax
mov esp, ebp
pop ebp
retn 10h
私が読んだものから、あなたはリターン命令の3種類があります:リターンを意味し、RET、RETNとRETFを、リターン近くに戻ります。彼らはオプションの引数nBytesを許可します。これは、定義された変数からポップするバイト数を推測します。 retの代わりにretnまたはretfを使用する必要があるのはいつですか?オプションのパラメータnBytesはどのようにして計算できますか?
ああ、ret NのNは、呼び出し元が渡したプッシュされた引数の数を指し、私が思ったようにローカル変数は参照しません。それですか? –
はい。これはプッシュされた引数の数です。ローカルにはmov esp、最後にebpコマンドがポップされます – Max