a.outフォーマット

先日の続きで,Plan9のa.outフォーマットを眺めてみる.

  • マジックナンバ (0x1eb)
0000000  000001eb
  • テキストセグメントのサイズ (0x42)
0000000           00000042
  • データセグメントのサイズ (0x10)
0000000                    00000010
  • BSSセグメントのサイズ (0x0)
0000000                             00000000
  • シンボルテーブルのサイズ (0x0)
0000010  00000000
  • エントリポイント (0x1020)
0000010           00001020
  • PC/SPオフセットテーブルのサイズ (0x0)
0000010                    00000000
  • PC/行番号テーブルのサイズ (0x0)
0000010                             00000000
  • テキスト
0000020  83ec10b8 01000000 890424b8 00200000
0000030  89442404 b80e0000 00894424 08e81000
0000040  0000c704 24000000 00e80c00 000083c4
0000050  10c3b814 000000cd 40c3b808 000000cd
0000060  40c3
  • データ
0000060      4865 6c6c6f2c 20776f72 6c64210a
0000070  0000

ディスアセンブルしたかったら,acidでasmコマンドかな.

cpu% acid hello2
hello2:386 plan 9 executable

/sys/lib/acid/port
/sys/lib/acid/386
acid: asm(0x1020)
main 0x00001020	SUBL	$0x10,SP
main+0x3 0x00001023	MOVL	$0x1,AX
main+0x8 0x00001028	MOVL	AX,0x0(SP)
main+0xb 0x0000102b	MOVL	$.string(SB),AX
main+0x10 0x00001030	MOVL	AX,0x4(SP)
main+0x14 0x00001034	MOVL	$0xe,AX
main+0x19 0x00001039	MOVL	AX,0x8(SP)
main+0x1d 0x0000103d	CALL	xwrite(SB)
main+0x22 0x00001042	ADDL	$0x10,SP
main+0x25 0x00001045	RET
xwrite 0x00001046	MOVL	$0x14,AX
acid: