おしながき

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セクションの構造:FDE編

データ構造

んで、FDEのデータ構造です。

No. データ名 サイズ 説明
1 length 4Byte int FDEのNo.2-x のデータサイズ(Byte単位)です。
2 CIE_pointer 8Byte(64bit) unsigned long このFDEが使う(参照する)CIEを指定します。指定方法は、.debug_frameセクションの最初からのoffsetでこれが格納されます。要は、このFDEが参照するCIEは、.debug_frameの最初のアドレスにこの値を足した場所にあるってこと
3 initial_location 8Byte(64bit) unsigned long このFDEが対象とするCodeの冒頭のメモリアドレスを格納
4 address_range 8Byte(64bit) unsigned long このFDEが対象とするCodeのメモリ範囲。No3のinitial_locationにこの値を足した範囲のアセンブラコードの範囲をこのFDEで表現してますよって意味になります
5 instructions No1-24 Byte (24はNo2+3+4) - そのFDEで定義する、CFIルール表の変化を定義する命令の羅列
6 padding -(必要があれば) 0x00 バウンダリの境界などにより必要だったら、0x00のパディングが埋まります


<No.2> CIE_Pointer

FDEは、先の通りCFIルール表の「行」を定義するもんです。が、テーブルである以上、行の前に列の定義が必要です。んで、列の定義はCIEにあります。
よって、FDEは、列を定義するCIEを指しておく必要があるわけで、その役目がこの列
指定方法は、.debug_frameセクションの最初からのoffsetでこれが格納されます。
要は、このFDEが参照するCIEは、.debug_frameの最初のアドレスにこの値を足した場所にあるってこと
あと、この値は、CIEかFDEかの区別に使います。この値が0xffffffffffffffff(-1)ならCIE、それ以外ならFDEになります。


<No.5> instructions

これが、実際のアセンブル命令に対するCFA/各仮想のレジスタの値の動き方を定義する命令の羅列です。
各命令は.debug_frameセクションの構造:DW_CFA命令編を参照してね。
目次に戻る:DWARFファイルフォーマット