21日目「それでも…、僕には…、守りたいOSがあるんだ!!」

はりぼるーぜ「どのみち私の勝ちだ。もはや止める術はない。メモリは書き換えられ、上書きされたコードは新たなるクラックののろしとなる。人があまた持つセキュリティホールのひとつだ。その程度のOS、作ってきたのは誰だ!! 君とて、その1人だろう」
はりぼてきら「それでも…、僕には…、守りたいOSがあるんだ!!」
 そうなんだ。俺はOSを守りたいんだ。って、ここでひとつ質問! 「そもそも、OSを守るって何? 意味が分からん。」と思ったそこのあなた! 実は俺もそう思いました。OSを守るってなんなんだよー。
 ここでWindowsとかLinuxとかを思い出してみる(思い出して〜ごらん、あんなこと、こんなこと、あったでしょ〜)。すると、プログラマなら分かると思うが、よくへんなプログラムを実行すると、メモリアクセス違反というのが発生してプログラムが強制終了されていた。WindowsXPなら、変なウィンドウがでて、この情報をマイクロソフトのデータベースに送信しますか? とか言われるアレだ。
 それで、問題は「メモリアクセス違反っていったい何?」ってことなのだ。あれはぶっちゃけて言えば「アプリケーションが、OSしか使っちゃいけないはずのメモリを使おうとしましたよ」ということなのだ。いや、もしかしたら、微妙に違うかもしれんけど、そんな些細なことなんてどうでもいいんだ。要は、だいたいの感じをつかむことが大切なんだ。んで、つまりは、アプリケーションが勝手にいろいろな場所のメモリを書きかえることができたら、それはもう一撃でOSを粉砕することができるわけで、そんなことはOS的には、おいおいちょっと待てよ、というわけで、ここで、じゃあOSを守っちゃう仕組みを作っちゃおうという話になるわけですよ。
 だが、そのOSを守る仕組み(メモリ保護)は、またもやCPU様のお力を借りなければなし得ないことなわけなのだ。それで、どうやらCPUに、「ここから、ここまでのメモリはOSしか使えないからよろしく〜」といっておけば、そのメモリ領域にアプリケーションがアクセスした瞬間に、ちょい待ちよ〜だんな〜、そっから先はとうせんぽ、というわけで例外の割り込みを発生させてくれるというわけだ。そして、その例外割り込みは、具体的には「INT 0x0d」なんだ。つま〜り、マウスやキーボード割り込みを扱ったときと同じようにすれば、例外時の処理をさせることもなんなく可能なわけだ。うーん、簡単やん。
 だから、やたらめったら難しい言葉を使うと分かりにくいが、要するにCPUに「ここから、ここまでのメモリはOSしか使えないからよろしく〜」といっておけば、アプリケーションがそこにアクセスしたときに、おい待てよ〜、となって、なんかアプリケーションが悪いことしてまっせ、とOSに通知してきて、OSがアプリに波動拳〜、アプリはあえなく撃沈! という筋書きだ。
 というわけで、今日はOSの保護についてだった。なんかここ最近は、WindowsLinuxといったOSを使っているときにも、ちらっと「見える」部分の作成に取り掛かっているような気がする。いやー、なんか確実に進んでる感があるな(うほー)。
 明日は、C言語でアプリ作成だ! 乞うご期待!