2017-02-25 20 views
1

gdbが "until"コマンドをどのように実装しているのか、私は非常に興味があります。gdbコマンド "until"はループを飛び越えることができますか?

私は、「仕上げ」がどのように機能するのか理解できます。関数の始めと終わりにebp/espレジスタを操作するコードルーチンがあるので、gdbはこれを使用して関数。

しかし、私の質問は、gdbはどのようにループの終わりを知っているのですか?デバッグシンボルが提供されていない場合、ループは別の内部ループを組み込む可能性があるので、ecxレジスタに依存することは解決策ではありません。それでは、ループの終わりをどうやって知っていますか? "while"と "do/while"と "for"のアセンブリコードは異なる可能性があり、 "finish"コマンドで探すことができるパターンがあるかどうかは不明です。

あなたの説明を参照してください。

答えて

1

gdbはループの終了をどのように知っていますか?

これはありません。 documentation

until 
    Continue running until a source line past the current line, in the current stack 
    frame, is reached. 

    This command is used to avoid single stepping through a loop more than once. 
    It is like the next command, except that when until encounters a jump, it 
    automatically continues execution until the program counter is greater 
    than the address of the jump. 

これは、上記の最後のステートメントで説明したとおりです。

関連する問題