おしながき

ELFファイルフォーマット

  • .eh_frameセクションの構造と読み方

DWARFファイルフォーマット

NCURSESライブラリ

  • NCURSES Programing HOWTO ワタクシ的ほんやく
    1. Tools and Widget Libraries
    2. Just For Fun !!!
    3. References
  • その他、自分メモ
  • NCURSES雑多な自分メモ01


最近の更新 (Recent Changes)

2019-09-24
2013-10-10
2013-10-03
2013-10-01
2013-09-29
目次に戻る:DWARFファイルフォーマット

.debug_frameセクションの構造:CIE編

CIEのデータ構造

ということで、まずデータ構造を表でざっくり。

No. データ名 サイズ 形式 説明
1 length 4 Byte int 以下、No.2-xの部分のデータサイズ(Byte)です
2 CIE_id 8 Byte(64bit) unsigned long CIEかFDEかのデータの区別。0xffffffffffffffff ならCIE。それ以外はFDE
3 version 1 Byte unsigned char .debug_frame情報のバージョン。DWARFのバージョンとは違うものです。
4 augmentation ?(0x00までのデータずっと) BinaryData (UTF-8文字列) コンパイラ拡張による (通常無視OK?)
5 code_alignment_factor uLEB128のサイズ uLEB128 CFIルール表の行での命令アドレスのバウンダリサイズ。これが例えば4なら、CFIの各行の命令アドレスも4の倍数になる
6 data_alignment_factor sLEB128のサイズ sLEB128 先のCIE/FDEの命令にあった offset(N), val_offset(N)を計算する際の、データアドレスのバウンダリ値。この後の命令説明で出て来ます
7 return_address_register uLEB128のサイズ uLEB128 CFIルール表内のregisterのうち、関数の戻りアドレスを示すレジスタの番号
8 initial_instructions No.1 length - (No.2-7,9の総和サイズ) (後述) CFIルール表の「列の定義」と「最初の行のデータ設定」 以下参照
9 padding No.1 length - (No.2-8の総和サイズ) 0x00 単なるパディング


No.8: initial_instructions について

このデータ部分で、CFIルール表の「列の定義」と「最初の行のデータ設定」が指定されます。
具体的には、CFIルール表の2列目の「CFA」、および3列目以降のreg xそれぞれに対する初期指定の命令が、CFA 1つ+使う(表に定義する)レジスタ数分繰り返されています。
例えば、(DWARF V3 App.D.6. Fig.6.3 より)

DW_CFA_def_cfa(7.0) :3バイト
DW_CFA_same_value(0) : Reg 0の定義:2バイト
DW_CFA_undefined(1) : Reg 1 の定義:2バイト
.... (以降レジスタ数分続く)

みたいな感じです。
この「DW_CFA_なんちゃら」は、命令です。これの説明は後述。


目次に戻る:DWARFファイルフォーマット