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: