概要
「シューティングゲームをチートから守るには?」
「リバースエンジニアリングされないためには?」
「脆弱性を見つけ,権限を奪取するには?」
普通のプログラミングだけでは意識しない低レイヤーの世界は,コンピュータを自在に操れる楽しさでいっぱい。アセンブラの読み方から最新の応用事例まで,技術と考え方が実例を通じてわかります。
こんな方におすすめ
- コンピュータの仕組み/低レイヤーに興味がある方
- セキュリティに興味のある方
著者から一言
はじめに
だれもがコンピュータを使う時代になり,利便性も格段に上がりました。しかしその分,システムは複雑になり,技術者が学ぶべきことは多くなり,同じコンピュータ技術であってもまったく知らないブラックボックスが増えました。
- OSはなにをしているのか?
- CPUやメモリはなにをしているのか?
- なぜソフトウェアは動くのか?
- なぜセキュリティホールは作られるのか?
- なぜ任意のコードが実行されてしまうのか?
そんな疑問に答えるための味方になってくれるのが,アセンブラなどバイナリレベルの知識です。
時代はWebアプリケーション全盛ですが,バイナリレベルの知識はいまなお活躍の場を失っていません。たとえば
「C/C++で開発中のプログラムに原因不明のバグがあり,ソースコードを眺めてみても,原因がどうしてもわからない」
という場合,アセンブラでコードを書くことはなくとも,読むことができれば,デバッガを立ち上げ,即座にバグの発生個所を特定し,対処できる場合があります。
また,他人が作ったライブラリにバグがあり,ソースコードが手元にない場合でも,内部を解析し,問題個所を回避したり,あるいはライブラリ作成者に詳細を伝えられます。
さらに例を挙げるならば,アセンブラを学ぶことでCPUに近い部分を理解できるため,カーネルやドライバといったブラックボックスになりがちな低レイヤーの問題にも対応できますし,それらを開発する場合にも役立ちます。
ただ正直なところを言うと,「役に立つ/立たない」「人気がある/ない」といったことは,どうでもいい話です。なぜなら私の経験上,「需要がありそう」「役に立ちそう」などと感じて学び始めたことを,実際に習得できたためしがないからです(笑)。私があまり優秀ではなかったからかもしれませんが,学生時代に「勉強しなさい」と言われて,素直に勉強した人がどれだけいるでしょうか? 統計をとったわけではありませんが,実感として全国で1%未満でしょう。
では,ものごとを習得するには,いったい何が必要なのでしょう?
私は中学生の頃にプログラミングを学び始めました。将来プログラマになろうとも,技術でお金を稼ごうとも思っていませんでしたが,当時の私はコンピュータに夢中になり,毎日夜ふかしし,次第に学校の成績も落ち,両親を心配させるほどプログラミングにのめり込みました。
なぜ,あのとき,あれほどまでにコンピュータにハマったのか?
それは「プログラミングがおもしろかったから」。自分の書いたコードが書いたとおりに動くことが,思ったとおりに動かないことが,その理由を探すことが,ただただ楽しかったからだと思います。
私はそういった「楽しい」「もっと知りたい」と思えるような技術書を目指し,本書を執筆しました。そして,無数にあるプログラミング言語の中で,アセンブラが一番「楽しい」を持っている言語だとあらためて思いました。
あなたが「低レイヤーの話っておもしろそうだな」とふと思ってこの本を手に取ったならば,その予想以上に読む価値のある1冊になっている自負しています。
本書を通して,バイナリレベルの世界の楽しさを少しでも感じていただければ幸いです。
補足情報
本書のサンプルファイルは以下からダウンロードできます。
https://github.com/kenjiaiko/binarybook