コース目次 / 第0章
はじめに — 読むための、アセンブリ
このコースが「書く」ではなく「読む」に振っている理由を理解し、objdump/gdbで自分のコードのアセンブリを見る進め方を確認します。法と倫理ゲートに同意します。
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章です。
この章はまだ完了していません。
保存できませんでした(プライベートブラウズ中かもしれません)。この端末に進捗は残りませんが、先へは進めます。