プログラムとは何か


まず初回ということで、解析そのものの話ではなく、プログラムの根本について書き連ねたいと思います。

プログラムは一体何なのか。
それは一言で言ってしまえば、ただの数値の塊でしかありません。

これを読まれている方の中にプログラミングの経験がある方がどのくらいいるかはわかりませんが、一般的に”プログラム”なるものを作ろうとすれば高級言語もしくは低級言語と呼ばれるプログラミング言語を用います。
(例外として機械語が存在しますが、いまどきそんなことをするのは筆者くらいなものだと思うので放置します)
このプログラミング言語は勿論人間にも解読できますし、書くことができるものです。

ではなぜそれが数値の塊になってしまうのでしょう。
パソコン上でプログラムを動作させようと思ったら、まずそれらのプログラミング言語で作成されたものを機械が理解できる形にしなければなりません。
(その変換には高級言語の場合はコンパイラ、低級言語の場合はアセンブラというものを用います)
それが数値の塊、と呼ばれる機械語で書かれたプログラムになります。
つまりどんな方法でプログラムを作成していたとしても、一度はその機械語に変換をしなければプログラムは動作しないわけです。

機械語はただの数値でしかありません。
これを何も見ずにすらすらと読めるのは…最高のクラスのクラッカーもしくはビル・ゲイツくらいなものでしょう。
筆者も全てを覚えているわけではないので、機械語でプログラミングをするときは大量の参考資料に頼っています。
まぁ、数値どうのこうのというのは、どんなものか検討もつかない方は試していただいた方が早いです。
次回辺りに実験としてプログラムを数値として読む予定ですので。

…と、ここまででプログラムは全て数値だけで構成されている、ということを書いたのですが、ここまでは大丈夫でしょうか?
次に説明するのはこれをどういった過程を経て解析していくのか、というその手法についてです。
機械語といえど、ごくわずかな人数ですが読める人間が存在します。
ですから、解読の方法は存在する、ということはわかっていただけているかと思います。
数値化されたプログラムは便宜上、16進数というあらわし方で扱われることが多いです。
これは普段使っている0〜9までの数値とは違い、0〜Fを用いて表すものです。
この辺りについては後々windows付属の関数電卓というものを用いてかなりの頻度で触れるので、今のうちに関数電卓で16進数と10進数の変換に慣れておくと良いかもしれません。
本題に戻りますと、その16進数で表されたプログラムをさらに人間に読みやすいように書き換えます。
それがアセンブリ言語と呼ばれる低級言語のニーモニックというものになります。
これについて詳しいことは次回以降で触れていこうと思います。

堅苦しく読み物のように必要最低限の知識を学んでいただきましたが、筆者自身独学で、さらに本などの参考書はほぼ完全に覚えた後に購入し、復習用にしていたくらいですから、間違っている点、不足している点などがあるかもしれませんが、どうかご容赦ください。
解析とは言ってもつまらないプログラムの解析だけではなくゲームの無敵化とか、そんなのも扱っていければな、と思っていますので。(笑


Copyright © 2008 Rapidsy. All Rights Reserved.