コース目次 / 第4章

まとめ — 読む力を、CTFの入口に

レジスタ・呼出規約・スタックフレーム・分岐とループの読み方を畳みます。sec-cとつながる形で理解を固め、revとpwnという2つのCTFカテゴリへの土台を確認します。

第4章 / 全5章目安 約3分この章のゴール: アセンブリの読み方を畳み、rev/pwnへの道筋を持つ

レジスタ、呼出規約、スタックフレーム、条件分岐とループ。x86-64 アセンブリを、実際にコンパイルしたコードで読みました。

アセンブリ読解・早見表

見るもの 読み方
引数 rdi, rsi, rdx, rcx, r8, r9 の順に渡る(System V AMD64)
関数の入り口 push rbp / mov rbp,rsp(スタックフレームを作る)
関数の出口 pop rbp / ret(畳んで、戻り先アドレスへジャンプ)
ローカル変数 [rbp-オフセット] で読み書き
条件分岐・ループ cmp で比較 → jxx 系がフラグを見て飛ぶ
読む手順 ジャンプ先に印を付け、ブロックに分けて意味を言語化する

これは、初めて出会うどんなアセンブリにも通用する共通の骨格です。関数がどれだけ複雑でも、「引数はどこから来て」「フレームはどう作られ」「どこで比較して、どこへ飛ぶか」という同じ問いを、繰り返し当てはめれば読み解けます。

sec-c と、つながって

sec-c で見た「戻り先アドレスの上書きでクラッシュする」現象は、いま「ret がスタック上の戻り先アドレスを信じてジャンプする」という、具体的な命令の話として理解できるようになりました。上のレイヤー(C言語)で見た現象が、下のレイヤー(アセンブリ)でどう実現されているかをつなげる——これが、低レイヤーを学ぶ意味です。

次の道 — rev と pwn へ

このコースの読み方は、CTF の2つのカテゴリでそのまま主力になります。rev(リバースエンジニアリング)——バイナリを読んで、隠された条件やロジックを解き明かす。pwn(バイナリ攻略)——sec-cで見たようなメモリの穴を、実際のプログラムの制御に応用する。どちらも、この「読む力」が土台です。

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

お疲れさまでした。あなたはもう、0と1の羅列に見えていた命令の並びから、意味を読み取れます。

こうなっていればOK

この章で卒業です。

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