.debug_infoセクション内の、メインのデバッグ情報の「データ構造」を定義している「Abbreviationsデータ」を格納しているセクションですね。
つまり、.debug_infoセクションに書かれているデータの「メタデータ」です。
といわれても。。。これいまいち想像つかみにくいんで、まずはデバッグ情報とDIE(.debug_info/.debug_abbrevセクションの概要)を見てくださいな。以下、その前提っす。
まず、またまた参考まで、readelf君謹製.debug_abbrevセクション解析データの例を以下にです。
Contents of the .debug_abbrev section: Number TAG 1 DW_TAG_compile_unit [has children] DW_AT_producer DW_FORM_string DW_AT_language DW_FORM_data1 DW_AT_name DW_FORM_string DW_AT_comp_dir DW_FORM_string DW_AT_low_pc DW_FORM_addr DW_AT_high_pc DW_FORM_addr DW_AT_stmt_list DW_FORM_data4 2 DW_TAG_base_type [no children] DW_AT_byte_size DW_FORM_data1 DW_AT_encoding DW_FORM_data1 DW_AT_name DW_FORM_string 3 DW_TAG_base_type [no children] DW_AT_byte_size DW_FORM_data1 DW_AT_encoding DW_FORM_data1 (以下続く、ここでは省略)まず、説明の前提として、以下とします。
これは、簡単です。このセクションは、ヘッダとか無く、以下の構造で表現された「Abbrevレコード」が、必要数分、ひたすら続いているだけ、です。
で、それぞれの「Abbrevレコード」は、以下の表の上から下の順に、データが連続してつまっているだけ、の構造になっています。
項番 | 形式/サイズ | データ項目名 | せつめい |
1 | uLEB128 | Abbrev ID | このAbbrevレコードのAbbrev IDです。 この値が、.debug_infoセクション内の各DIEの冒頭に書かれています(これによって参照されます) |
2 | uLEB128 | TAGコード | このAbbrevレコードのTAG名毎に割り振られたコードです。 つまり、この値次第で、このAbbrevレコードの構造で格納されたDIEは何のためのデータか、が分かります。 TAGコードとその意味は(こちら)をみてね ※例:DW_TAG_subprogramなら、関数のデバッグ情報なのじゃな、など |
3 | 1 Byte | 子DIEの有無 | このAbbrevレコードのデータ構造でデバッグ情報を格納しているDIEに、子DIEがいるかどうかを示しています。 値は、0x01 (DW_CHILDREN_yes)→子DIEあり。 0x00 (DW_CHILDREN_no) → 子DIEなし。(続くDIEは同じ階層のDIE、つまり兄弟DIE |
4-1 | uLEB128 | Attributeコード | このAbbrevレコードが持つ、Attribute(属性)のコードです。 このAttributeは、AbbrevレコードのTAG名次第で、必要な数が可変です。なので、「4-1 Attributeコードと次の4-2 FORMコードの組」が、必要なAttribute数分、繰り返されます Attirbuteコードとその意味は(こちら)を見てね |
4-2 | uLEB128 | Formコード | 4-1のAttributeコードで示されるデータ属性の実際の値の格納方法を示すコードが格納されています。 この値次第で、.debug_section内に直接2Byte定数で書かれていたり、文字列で書かれていたり、アドレスであったり、します このFormコードの一覧と意味は(こちら)をみてくださいです。 |
- | - | - | (Attribute数分、4-1と4-2のセット、つまりuLEB128が2個づつ、繰り返し。。。) |
x-1 | uLEB128 | Attributeコード 0x00 (終端) | AbbrevレコードがもっているAttributeの数だけ、4-1と4-2のセットが繰り返されたあとの終端は、Attributeコード、Formコードとも「0」のレコードが来て1つのAbbrevレコード終り、となります。 |
x-2 | uLEB128 | Formコード 0x00 (終端) | (同上) |
(2013/6/12 まだ作成したてよぉ〜)
[PageInfo]
LastUpdate: 2013-06-12 23:06:51, ModifiedBy: koinec
[License]
FreeBSD Documentation License
[Permissions]
view:all, edit:members, delete/config:members