32

C ++などの例外をサポートする言語を使用する場合、例外の処理中にアンワインドする必要がある呼び出しフレームを説明するために、ランタイム環境に追加情報を提供する必要があることを私は知っています。この情報は、やなどのオブジェクトファイルの特別なセクションに含まれてい.eh_frameます.eh_frame_hdr

しかし、これらのセクションにはどのようなデータ構造が格納されているのでしょうか。つまり、C構造体を使用して読み取ることができますか?それらはGNUアセンブリコードのステートメント(、、、、、、など)と.cfi関係が.cfi_startprocありますか?もしそうなら、これらの条項のそれぞれがそれらのセクションで何を引き起こしますか?そのセクションはそのセクションと何の関係がありますか?.cfi_endproc.cfi_offset.cfi_def_cfa_offset.cfi_personality.cfi_lsda.eh_frame_hdr.eh_frame

なるべくC構造体を使った説明をお願いします。ありがとうございました。

4

1 に答える 1

23

cfi ディレクティブを参照してください

問題のセクションのほとんどの歴史と理論をカバーする必要があります。

eh_frame については、例外の巻き戻しとソース言語の情報が含まれています。このセクションの各エントリは、単一の CFI (call frame information) で表されます。

参照、linuxfoundation の eh_frame

eh_frame_hdr は、C++ ランタイム コードで eh_frame にアクセスするために使用されます。つまり、eh_frame から情報を効率的に取得するためのポインターとバイナリ検索テーブルが含まれています。

ここで、このセクションをどのように読み書きするかを確認したい場合は、次のリンカ コードを参照することをお勧めします。

( EhFrame.cpp、EhFrameHdr.cpp、および EhFrameReader.cpp を探します)

幸運を !!

于 2012-12-30T15:20:00.720 に答える