新アプリに関するメモ
(1)
- 新アプリではバイナリにリロケーション情報をもたせる必要がある。なぜならwinやlinuxでは0番地付近にロードできる保証がないから。
- ぐいぐい00ではメモリマップトファイルの考えがあって、実行ファイルを加工しないでマップするだけにしたかったのでリロケーションなんて論外だった。そのほうが単純で効率がいい。こういう考えだったので、実行ファイルヘッダはバイナリの一部であり、つまりバイナリ内にヘッダが埋め込まれているという設計だった。
- でも新アプリではこういう考え方ではないので(リロケーションが必要な時点でもう無理)、ヘッダはヘッダ、バイナリはバイナリである。
- bimファイルにはリロケーション情報が残っていないので、obj2bimで作ったファイルを加工するという方法では新アプリは生成できない。ということはobj2bimに相当するものから作らないといけない、うう、しんどいなあ。
(2)
- リロケーションができるってことは、winやlinuxみたいな普通のDLLもできる。リロケーション情報付きのファイルって結局COFFみたいなものだな。ってことは新フォーマットを考えるよりはCOFFを採用したほうが楽かな。でもCOFFってビット数に依存しないフォーマットって感じじゃないしなあ(neriさんに言われて16/32/64でも共通に使えるような形式を選びたい)。そういう大事なところは欠けているくせに、なんかゴテゴテしてていまいちなんだよなあ、COFFって。ELFはどうなのかな。調べるのめんどくさいから、とりあえずシンプルな独自形式作ってから考えるかー。
(3)
- フォーマット名:urb(ユニバーサル・リロケータブル・バイナリ)
- 中身はタグのかたまり
- 可変長数値は全部s7st符号で(これなら扱いやすいしbit数に依存しない、エンディアン(?)もbigに統一できる)。
- フォーマット名&バージョンタグ:
- ネームタグ(オプション):
- このurbファイルの名前。フルネームとニックネームがあってもいいな。
- IDタグ(オプション):
- このurbファイルのID。ほぼ必然的に作者情報も含む。
- defineタグ:
- こめんとタグ
- セクションタグ:
- 中身はサブタグの集まり
- ネームタグとかもつけられる
- アラインタグ
- 属性タグ
- CSなのかDSなのかとか。ここはフォーマット名&バージョンタグに依存。
- リロケーション前のバイナリイメージ
- publicラベル定義タグ
- staticラベル定義タグ(オプション・主にデバッグ用シンボル定義)
- リロケーションデータ構造タグ
- リロケーション先がないシンボルも要求できる。それはそのシンボルを含むセクションが必要だといっているだけ。
(4)
- これそのままで既にオブジェクトファイルにもライブラリにもなっているな・・・。ライブラリ用のフォーマットいらないっぽい。
こめんと欄
- neriさんがこのページを見つけて読んでしまったらしい、恥ずかしい(笑)。こんな落書きで意味あることを汲み取ってもらえるなんてさすがだ。しかも(どちらかといえば)参考になるところもあるってほめられた。わーい。 -- K 2008-03-11 (火) 18:23:19