Phase 0: コンピュータの土台

この章は言語構文より先に、CPUを観察するための最低土台を固めるフェーズです。ここが弱いと、以降のGDB/ABI/逆アセンブルで詰まります。

到達目標

  • 2進数/16進数/符号ありなしを変換できる
  • レジスタ、フラグ、スタックの役割を説明できる
  • 命令フェッチ/デコード/実行の流れを言語化できる
  • エンディアンとアドレッシングモードの差を説明できる

最短の観察手順

1. Cコードを最小でコンパイルして逆アセンブルを確認

gcc -O0 -g main.c -o main
objdump -d main | less

2. GDBでレジスタとメモリを追う

gdb ./main
(gdb) b main
(gdb) run
(gdb) info registers
(gdb) x/16xb $rsp

3. 1命令ずつ実行してフラグ変化を観察

(gdb) stepi
(gdb) stepi
(gdb) info registers eflags

チェックポイント

  • ZF は「前回の比較が等しい」時に1になる
  • RSP は関数呼び出しで増減する
  • リトルエンディアンでは下位バイトが低位アドレスに置かれる
  • call は戻りアドレスをpushしてから分岐する