1

dwarf2でスタックを巻き戻すことで、いくつかの非常に基本的なABI(アプリケーションバイナリインターフェイス)シナリオで引数の信頼性の高い回復がどのように保証されるかを理解していません。ABIについて考えてみましょう。これは、最初の3つの引数がレジスターにあり、スタックにある必要があることを示しています。私が理解しているように、dwarf2スタックの巻き戻しメカニズムにより、CFIテーブルが適切に満たされている場合、現在のフレームの呼び出しポイントでレジスタの値を取得できます。ただし、これでは、呼び出し元のプロローグに移動して、引数レジスタの内容を知ることはできません。したがって、同じフレーム内の異なるポイントでもレジスタの値を見つける方法があったはずです(.debug_frameセクションでエンコードされたテーブルは、前のフレームの場所のみを示しています)。

私の理解に何か問題がありますか?このような場合、dwarf2デバッグ形式に基づくデバッガーはどのように機能しますか?引数がスタックで渡されるアーキテクチャの場合、プログラム内のすべてのポイント(任意のフレーム)で値を回復するための問題はありません。

4

1 に答える 1

0

当時の私の理解は間違っていなかったと思います。dwarf2 でスタックの巻き戻しが機能する方法は、Call Frame Information (CFI) を使用することです。これにより、デバッガーは前のフレームの 1 つの状態を作成できます。そのフレームのロケーション式により、デバッガーは引数のロケーションを知ることができます。

于 2011-04-07T10:06:23.793 に答える