2019年10月22日火曜日

Z8k-COFF フォーマット 1

つづいてZ8k-COFF

COFFの資料はネット上にいくらでも転がっているので、理解は楽だろうと踏んでいたのですが、x86のものや、WidowsのPEフォーマットのものばかりで、Z8000のCPU依存に関する情報はほとんどありません。
それでも基本構造は同じなので、機種依存はGNUのBFDライブラリのソースコードを参照しながら進めています。

参考にした情報のリンクを上げておきます。
 DJGPP COFF Spec
 逆アセのスス乂
 BFDソースコード

gccとasでテスト用のオブジェクトファイルを作り、バイナリエディタとobjdumpで変化を確認していく地道な作業を続けており、Z8000依存で判明した部分や忘れてしまいそうな事などをメモ代わりに書いていきます。変数名は、DJGPPのドキュメントに合わせてあります。

Z8k-COFF フォーマット

次の7パートからなっている。
 ・ ファイルヘッダ
 ・ オプショナルヘッダ
 ・ セクションテーブル
 ・ セクションデータ
 ・ リロケーション情報
 ・ シンボルテーブル
 ・ 文字列テーブル 

ファイルヘッダ

ファイルの全体的な構造が記されている

 f_magic 
 0x8000 - Z8001/2の識別はflagsによる。

 f_flags
 0x1000 - Z8001 セグメンテッドコード
 0x2000 - Z8002 非セグメンテッドコード 
 0x0200 - 不明 (ビッグエンディアンかも)
 0x0008 - ローカルシンボル情報なし 
 0x0004 - ライン番号情報なし
 0x0002 - 実行形式
 0x0001 - リロケーション情報なし

オプショナルヘッダ

実行ファイルの場合のみ付き、実行ファイルに必要な付加情報が入っている。
下の2つは詳細不明。

 magic
 0x0000 

 vstamp
 0x0000 

セクションテーブル

セクションの情報が記されたセクションヘッダの配列。

 s_flags
 0x80 - 初期地を持たないデータ(BSS)
 0x40 - 初期値をもつデータ
 0x20 - 実行コード
 

0 件のコメント:

コメントを投稿