web-dev-qa-db-ja.com

.eh_frameセクションと.eh_frame_hdrセクシ​​ョンは正確に何を格納しますか?

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

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

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

27
LuisABOL

cfi-directives を参照してください。

それは問題のセクションのほとんどの歴史と理論をカバーするべきです。

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

参照してください ehfound in linuxfoundation

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

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

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

幸運を !!

19
Icarus3