-
Notifications
You must be signed in to change notification settings - Fork 3
COFF形式ファイルのいろいろ
hangedman edited this page Aug 30, 2023
·
29 revisions
Microsoft PE形式ファイルおよびCOFF形式ファイルの仕様がわかるもの
このあたりに実際の処理の記述がある
ヘッダ部分は140byte固定のようだ
ボディ部分の出力
- 0 ~ 20byte: COFFのヘッダー
- 21 ~ 可変長: section table
- .text
- rawData: アセンブラの機械語を含む https://www.delorie.com/djgpp/doc/coff/
- relocations: Relocation Directives https://www.delorie.com/djgpp/doc/coff/reloc.html
- .data
- .bss
- .text
- 36byte: PE auxiliary format 4: ファイル名を含む PE auxiliary format 4
- 36byte: 普通のシンボルテーブル: .text
- 36byte: 普通のシンボルテーブル: .data
- 36byte: 普通のシンボルテーブル: .bss
- 36byte: シンボルテーブル: COFF: Symbol Table
- 可変長: ストリングテーブル: COFF: String Table
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.