池袋バイナリ勉強会(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,