池袋バイナリ勉強会(12)に参加しました.

池袋バイナリ勉強会(12) on Zusaarに参加して来ました.
相変わらずPDP-11のバイナリと格闘しています.
前回はとりあえず逆アセンブルしようということで,16バイトのヘッダを飛ばしてそれより後ろの機械語を読んでいたのですが,今回はヘッダの内容も読みシンボルテーブルも出力できるようにしました.
実行ファイルは機械語がそのまま記録されているわけではなく,共有ライブラリやシンボルテーブル,対応アーキテクチャなど実行するためのいろいろな情報が詰まったファイルです.a.outという実行ファイルフォーマットでは最初に16バイトのヘッダ,ヘッダに指定されたサイズの機械語,ヘッダに指定されたサイズのシンボルテーブルが書かれています.
細かいことはソースコードに書かれているので,気になったら読んでみてください.

入力

main()
{
  int a, b;
  a = 1;
  write(1, "hello\n", 6);
  exit(0);
}
test2(){}

出力

crt0.o:
start:
   0: f009            unknown
   2: 1180            mov	r6, r0
   4: 1226            mov	r0, -(r6)
   6: 0bd0            tst	(r0)+
   8: 1036 0002       mov	r0, 2(r6)
   c: 09f7 0008       jsr	r7, 0x18
  10: 100e            mov	r0, r6
  12: 09df 006c       jsr	r7, *$154
  16: 8901            sys	1
hello2.o:
~main:
		177770(r5):a
		177766(r5):b
_main:
  18: 0977 005a       jsr	r5, 0x76
  1c: e5c6 0004       sub	$4, r6
  20: 15f5 0001 fff8  mov	$1, 177770(r5)
  26: 15ce 0006       mov	$6, r6
  2a: 15e6 00a0       mov	$240, -(r6)
  2e: 15e6 0001       mov	$1, -(r6)
  32: 09df 004a       jsr	r7, *$112
  36: 2596            cmp	(r6)+, (r6)+
  38: 0a0e            clr	r6
  3a: 09df 006c       jsr	r7, *$154
  3e: 0077 0042       jmp	0x84
_test2:
~test2:
  42: 0977 0030       jsr	r5, 0x76
  46: 0077 003a       jmp	0x84
write.o:
_write:
  4a: 1166            mov	r5, -(r6)
  4c: 1185            mov	r6, r5
  4e: 1d40 0004       mov	4(r5), r0
  52: 1d77 0006 0052  mov	6(r5), 122
  58: 1d77 0008 004e  mov	10(r5), 116
  5e: 8900            sys	0
  60: 00a8            unknown
  62: 8602            bcc	
  64: 0077 002a       jmp	0x92
  68: 1585            mov	(r6)+, r5
  6a: 0087            rts	r7, 
exit.o:
_exit:
  6c: 1166            mov	r5, -(r6)
  6e: 1185            mov	r6, r5
  70: 1d40 0004       mov	4(r5), r0
  74: 8901            sys	1
csv.o:
csv:
  76: 1140            mov	r5, r0
  78: 1185            mov	r6, r5
  7a: 1126            mov	r4, -(r6)
  7c: 10e6            mov	r3, -(r6)
  7e: 10a6            mov	r2, -(r6)
  80: 0be6            tst	-(r6)
  82: 0048            jmp	r0
cret:
  84: 1141            mov	r5, r1
  86: 1844            mov	-(r1), r4
  88: 1843            mov	-(r1), r3
  8a: 1842            mov	-(r1), r2
  8c: 1146            mov	r5, r6
  8e: 1585            mov	(r6)+, r5
  90: 0087            rts	r7, 
cerror.o:
cerror:
  92: 1037 0018       mov	r0, 30
  96: 15c0 ffff       mov	$177777, r0
  9a: 1146            mov	r5, r6
  9c: 1585            mov	(r6)+, r5
  9e: 0087            rts	r7,