このret
命令により、「esp」レジスタが 4 増加しますか?
15021 次
3 に答える
25
はい、実行します
pop eip
使用できます
mov eax, [esp]
jmp eax
それを避けるために。
編集:まさにそれret
です。たとえば、jmp rel_offet
is は hiddenadd eip, offset
またはjmp absolute_offset
isにすぎませんmov eip, absolute_offset
。確かに、プロセッサがそれらを処理する方法には違いがありますが、プログラマーの観点からは、それがすべてです。
また、この imm8 値を : に追加する特別な形式のret
:ret imm8
もありますesp
。たとえば、__stdcall
関数はそれを使用してスタックからパラメーターを破棄します。スタックからretf
ポップする 16 ビット モードで使用されるバージョンは言うまでもありません。cs
EDIT2:
pop register
意味:
mov register, [esp]
add esp, 4
于 2010-11-27T15:53:46.263 に答える
2
はい。スタックには、プログラムの実行を再開するアドレスがあります(バッファオーバーフローを参照してください)。つまり、retは
pop ret_addr ; pop deletes ret_addr from stack by adding 4 to esp
mov eip, ret_addr
これは
pop eip
ruslikが言ったように
于 2010-11-28T16:16:58.600 に答える
0
はい、プロセッサーが 32 ビット保護モードで実行されている場合。リアル モードまたは 16 ビット プロテクト モードでは、RET は POP IP を実行します。これにより、ADD ESP、2 (4 ではなく) が発生します。
于 2010-12-02T14:22:07.837 に答える