Phase 2: GDB / 逆アセンブル

このフェーズは「命令を書く」から「既存バイナリを観察して原因を特定する」に移行します。実務の障害対応に直結する章です。

標準ワークフロー(最短)

1. デバッグビルドでシンボルを残す

gcc -O0 -g sample.c -o sample

2. ブレークして1命令ずつ追跡

gdb ./sample
(gdb) break main
(gdb) run
(gdb) stepi
(gdb) info registers

3. 逆アセンブルとメモリ観察

(gdb) disassemble /m main
(gdb) x/32xb $rsp
(gdb) x/8gx $rbp-0x40

必須コマンド(実務頻出)

実行制御
  • run, continue, nexti, stepi
  • finish, until
観察
  • info registers, bt, frame
  • disassemble, x/, info locals
監視
  • break, watch, rwatch, awatch
  • condition, commands

演習チェック(自己確認)

  1. 引数1番目が載るレジスタを答える(SysV AMD64)
  2. cmp直後のje成立条件を説明する
  3. クラッシュ時のbtから異常関数を特定する
  4. ローカル配列のアドレス範囲をx/で確認する