Wiki

Clone wiki

ikebin / 8086 / install

8086 > 1, 2, 2-1, 2-2, 2-3, 2-4, 2-5, 2-6, 2-7, 3, 4

CC0 この資料とサンプルコードはCC0(いわゆるパブリックドメイン)で提供します。


環境を準備。(PDP-11と共通)

テスト

hello.c

main() {
    printf("hello\n");
    return 0;
}
  • UNIX V6ではlibcのヘッダがないため #include はしない

コンパイル

$ 8086v6-cc hello.c
"hello.c", line 1: (warning) 'main' old-fashioned function definition
"hello.c", line 2: (warning) implicit declaration of function printf
  • 警告は無視
  • 8086v6-ccはシェルスクリプト

実行

$ 7run a.out
hello
$ 7run -d a.out
(略)
  • オプションなし: 実行
  • -d: 逆アセンブル

オプション

引数なしで実行するとオプションを表示

$ 7run
usage: 7run [-p] [-d|-v/-s] cmd [args ...]
    -p: PDP-11 mode
    -8: 8086/V6 mode
    -d: disassemble mode (not run)
    -m: verbose mode with memory dump
    -v: verbose mode (output syscall and disassemble)
    -s: syscall mode (output syscall)

シンボル

$ v6nm a.out
01a2 d
01c6 b
01a2 d
0000 t
001e T .cret
0022 T .csb2
001c T .dsret
001d T .sret
0037 T _exit
000c T _main
003f t _print10
00ae T _printf
0185 T _putc
016c T _strlen
0151 T _write
0000 t start
  • v6nmはシェルスクリプトで、8086バイナリを実行
  • どこにどんな関数があるのかという情報

ファイルサイズの縮小

シンボルを削ればファイルサイズが縮小できる。

$ ls -l a.out
(略) 662 (略)
$ v6strip a.out
$ ls -l a.out
(略) 470 (略)
  • v6stripはシェルスクリプトで、8086バイナリを実行

シンボルがなくなっているのを確認。

$ v6nm a.out
no name list

課題

【15分】シンボルの有無で逆アセンブルにどのような影響があるかを確認してください。


8086 > 1, 2, 2-1, 2-2, 2-3, 2-4, 2-5, 2-6, 2-7, 3, 4

Updated