COFF形式ファイルのいろいろ - HobbyOSs/opennask GitHub Wiki

資料

Microsoft PE形式ファイルおよびCOFF形式ファイルの仕様がわかるもの

osask(nask)でのWCOFF

nask内部処理

このあたりに実際の処理の記述がある

ヘッダ部分は140byte固定のようだ

ボディ部分の出力

WCOFFの中身

naskのEXTERNシンボルの挙動

https://github.com/HobbyOSs/opennask/wiki/Opecode-CALL

  • 下記のようなアセンブラを書くと、coffのrelocationに_inthandler27のエントリーが設定される
EXTERN  _inthandler21

xxx:
    CALL    _inthandler27

xxx:
    JMP    _inthandler27
  • raw dataの開始をindex=0とすると、_inthandler21というシンボルの開始位置がrelocationのr_vaddr(virtual address)となる
  • 下記の例の場合_inthandler27のvirtual addressは3となる(NOP, NOP, CALLのオペコードE8で3byte先にあって0-indexedなので3)
    14 00000000                                 _asm_inthandler27:
    15 00000000 90                                              NOP
    16 00000001 90                                              NOP
    17 00000002 E8 [00000000]                                   CALL    _inthandler27
  • EXTERNで宣言されていないシンボルをCALLで使うと構文エラーになる
		GLOBAL	_asm_inthandler27
		;EXTERN	_inthandler27 コメントアウト

[SECTION .text]

_asm_inthandler27:
                NOP
                NOP
		CALL	_inthandler27
$ nask test.nas test.img test.lis
NASK : 1 errors.