gdbでは、関数内でデバッグするときに、関数の最後まで実行するために "finish"コマンドを使用できます。gdbは関数呼び出しをどこで終了するかを知るためにどのようなメカニズムを使いますか?
私の質問は、ソースコード "{}"と一致するデバッグシンボルがない場合、gdbは関数の終了位置をどのように知っていますか?
gdbは、機能の終了に達したかどうかを判断するために、x86の下で "leave"または "mov%rbp、%rsp、pop%rbp"のいずれかを探します。
しかし、問題は、(1)ソースコードとABIの構造に応じて、関数呼び出しの開始/終了時に/ポップをプッシュする必要がありますいくつかの余分なレジスタがまだそこにいる、
です。
(2)コンパイル時にプッシュ/ポップする必要があるレジスタの数が決まっていますが、この "number"情報がバイナリ実行ファイルをスローするのではないかと思います。
gdbはどのようにして関数呼び出しの終了点を判断しますか? "finish"コマンドでジャンプできますか?
ありがとうございます!