Skip to content
This repository has been archived by the owner on May 18, 2020. It is now read-only.

バイナリフォーマットについて #26

Open
3 tasks
Drumato opened this issue Oct 28, 2019 · 3 comments
Open
3 tasks

バイナリフォーマットについて #26

Drumato opened this issue Oct 28, 2019 · 3 comments

Comments

@Drumato
Copy link
Owner

Drumato commented Oct 28, 2019

独自バイナリフォーマット,EFDについて

  • EFDのオブジェクトファイルを吐くアセンブラ
  • シンボル解決をするリンカ
  • 仮想メモリにマッピング,制御を移すローダ
@Drumato
Copy link
Owner Author

Drumato commented Oct 28, 2019

バイナリフォーマットについて(随時更新)

  • EFDヘッダ,(シンボルヘッダ+シンボルの実体)*n,シンボル名テーブルの構成
  • EFDヘッダの情報(64バイトを想定)
    • シンボル数
    • シンボル名テーブルの(ファイル先頭からの)相対オフセット
    • エントリポイントのアドレス
    • ファイルの種類(オブジェクトファイルなのか,実行ファイルなのか)
  • シンボルヘッダの情報(32バイトを想定)
    • シンボル名の(テーブル中の)インデックス
    • シンボル名の長さ
      • シンボル名をヌルターミネートで置きたくないため
    • 属性(関数なのか,読み取り専用データなのか)
    • 実体の長さ
  • シンボル
    • 関数(必ず8バイトアライン)
    • グローバル(同文)
    • 文字列リテラル

@Drumato
Copy link
Owner Author

Drumato commented Oct 28, 2019

コンパイラにつける機能

変数の型に RO<T>EXEC<T> などを作る.
これがそのままシンボルの属性となる.

アセンブリ生成時に # RO みたいなコメントアウトを用いる事で
シンボルの属性をアセンブラに渡す.

@Drumato
Copy link
Owner Author

Drumato commented Oct 29, 2019

typedef struct {
  uint64_t magic_number;
  uint64_t entry_point;
  uint32_t symbol_number;
  uint32_t file_type;
  uint64_t symbol_strtab_offset;
  char reserved[32];
} EfHeader;
typedef struct {
  uint32_t strindex;
  uint32_t strlength;
  uint32_t element;
  uint32_t size;
  uint64_t rel_offset;
  uint64_t flag; // 現状is_loadableフラグのみ
} SymHeader;

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Projects
None yet
Development

No branches or pull requests

1 participant