2

そのため、libdwarf を使用してプログラムの DWARF ファイルを解析しようとしています (この目的のために C に固執する必要があります)。具体的には、各 DIE から DW_AT_type タグを取得しようとしています。それらのほとんど(すべてかどうかはわかりません)はオフセットです。これらのタグの値を取得するための便利な関数を見つけようとしています。

例:

<2>< 286>
DW_AT_type <156>

ここで必要なのは、その特定の DIE の type 属性の 156 オフセット値です。

APIによって提供されるこれを行う機能があるかどうか知っていますか?

注: 私は C に固執する必要があるため、python ライブラリや dwarfdumped ファイルの解析はお勧めしません。特定の機能を探しているだけですが、ここ数日間試してみましたが、ドキュメントには見つかりません。

4

1 に答える 1

6

お分かりのように、DW_AT_type は別の DIE への参照です。

libdwarf は、dwarf_form* という名前のさまざまな関数を提供して、属性の生の値を意味のある型に変換します。あなたの場合、dwarf_global_formref 関数を探しています。

dwarf での参照は、デバッグ情報の先頭から探している DIE までのオフセットとして定義されているため、found の参照で dwarf_offdie_b を呼び出します。

エラー チェックなしのコード例:

// Dwarf_Debug dbg, Dwarf_Die die already initialized
Dwarf_Attribute attr;
Dwarf_Off offset;
Dwarf_Die typedie;
dwarf_attr(die,DW_AT_type,&attr,NULL);
dwarf_global_formref(attr,&offset,NULL);
dwarf_offdie_b(dbg,offset,1,&typedie,NULL);

各引数の正確な意味については、必ずマニュアルを確認してください。

于 2012-09-05T01:57:16.407 に答える