2019年10月23日水曜日

Z8k-COFF フォーマット 2

シンボルテーブル

シンボルが定義されたテーブル。
シンボル値は、シンボルクラスによって意味が変わったりするので複雑。

 e.e_name 
 シンボルネーム。8文字に満たない場合は、残りを0で埋められている。
 8文字の場合は、0で終端していない。
 先頭の4byteが0の場合、次の4byteは文字列テーブルへのオフセットになっている。

 e_value
 シンボルの値。e_scnume_typeによって意味が変わる。

 e_scnum
 シンボルが属しているセクション番号。セクションテーブルの先頭セクションは1になるので注意。
 0以下の値は特別の意味を持つ

  0 : 外部シンボル
 -1 : 即値 アセンブラで .equ 定義した値など、再配置で変化しない値
 -2 :  デバッギングシンボル

 e_type
 シンボルの型を表すことになっているが、オブジェクトファイルを見ると何故かいつも0x0000。
 実行ファイルには、何か値が入っている。
 e_sclass
 シンボルクラス。 DJGPP COFF SPEC の Symbol Table を参照 

 e_numaux
 現在のエントリに続く、補助エントリの数。シンボルクラスに応じて補助エントリの内容が変わる。

補助エントリ
 セクションクラスがファイル名とセクション定義の補助エントリは確認されるが、その他は不明。
 逆アセのスス乂の5.5.5 補助形式5:セクション定義を参照。

文字列テーブル

シンボルテーブルの後に続く、0で終端された文字列の配列。長いシンボル名などが収められる。
先頭4byteは、このテーブルのサイズ(先頭4byteを含む)。

0 件のコメント:

コメントを投稿