コース目次 / 第0章

はじめに — 読むための、アセンブリ

このコースが「書く」ではなく「読む」に振っている理由を理解し、objdump/gdbで自分のコードのアセンブリを見る進め方を確認します。法と倫理ゲートに同意します。

第0章 / 全5章目安 約5分この章のゴール: アセンブリを読む力の意義を理解し、実習環境を確認する

sec-c で、メモリを「アドレス+バイト列」として見る目を作りました。このコースは、その一段下——CPU が実際に実行する命令を見ます。

なぜ、アセンブリを書くのではなく読むのか

実務でアセンブリを手で書く場面は、めったにありません。でも読む場面は、たくさんあります——コンパイラが最適化した結果を確認するとき、マルウェアや CTF の問題を解析するとき、脆弱性が実際にどう動くかを追うとき。rev(リバースエンジニアリング)という診断分野の核は、この「読む力」です。
だからこのコースは、あなたに複雑なアセンブリプログラムを書かせません。代わりに、C言語で書いた簡単なコードが、どんなアセンブリになるかを、繰り返し読みます。

このコースの進め方

法と倫理ゲート

手を動かす前に

このコースは攻撃の技術に触れます。実習してよい相手は、次の3つだけです。

  • (a) 自分で作った練習用のやられ環境(このサイトが配る自作ターゲット)
  • (b) あなた自身の許可された環境(自分の Thousand SKY・secret-notes-ctf など)
  • (c) CTF 競技の中(規約の範囲で)

実在する第三者のシステムを許可なく触ることは、不正アクセス禁止法に触れます。 このゲートは、その線引きを毎回の入口で確かめるためのものです。詳しくは「セキュリティの法と倫理」へ。

sec-c と同じく、あなた自身の環境の gcc・objdump・gdb を使います。特別な仮想環境は使いません。

gcc --version
objdump --version
gdb --version

すべてバージョンが表示されれば準備完了です。

Intel 記法で読みます

アセンブリには主に2つの書き方(記法)があります。AT&T 記法(GNU 系のツールの既定)と、Intel 記法(多くの教材・ドキュメントで使われる、読みやすい書き方)。このコースはIntel 記法で統一します。

objdump -d -M intel 実行ファイル名   # -M intel で Intel 記法に

gdb の中でも set disassembly-flavor intel で切り替えられます。

このコースの地図

章 学ぶこと
第1章 基本の文法 — レジスタと、基本命令
第2章 呼出規約とスタックフレーム — 関数はどう呼ばれるか
第3章 条件分岐とループを読む

このコースの実習も、すべて自分がその場でコンパイルしたプログラムに対してです(法と倫理)。他人のバイナリを無断で解析することはありません。

準備ができたら、次の章へ。まずは、CPU の「手元にある変数」——レジスタからです。

こうなっていればOK

卒業まであと4章です。

この章はまだ完了していません。