アセンブリ命令retq
がどこに返ってくるのか分かりません。Retq命令、返信先
通常のコードを実行すると、スタックに指定されたアドレスに戻ります。しかし、スタック内のどこに返却アドレスがあるのかは、どのようにして知ることができますか?
要するに、スタック上のアドレスを見つけるためにrbpまたはespを使用していますか?研究・アセンブリ・コードの後
アセンブリ命令retq
がどこに返ってくるのか分かりません。Retq命令、返信先
通常のコードを実行すると、スタックに指定されたアドレスに戻ります。しかし、スタック内のどこに返却アドレスがあるのかは、どのようにして知ることができますか?
要するに、スタック上のアドレスを見つけるためにrbpまたはespを使用していますか?研究・アセンブリ・コードの後
は、ここに私の考えは次のとおりです。 のサンプルを見てみましょう:
fun:
push %rbp
mov %rsp,%rbp
...
...
pop %rbp
retq
main:
...
...
callq "address" <fun>
...
...
我々はretq前に指示がある見ることができます。 「ポップ%のRBP」は
:popコマンドの前に :0000 0000 0000 00D8(スタックは下位アドレスに上位アドレスから成長すると仮定)
:RSPは、popコマンドの後00D00000 0000 0000を指摘しました。
popコマンドの後には、rspが新しいアドレスを指し、retqがこのアドレスをリターンアドレスとして使用します。
"とスタックスタックポインタ(rsp)に保存"のrbpを意味しますか? –
実験したい場合は、 'retq'を' addq $ 8、%rsp;に置き換えてみてください。 jmpq -8(%rsp) 'です。機能的に同等です(ただし、パフォーマンスには問題ありません)。 –