数日前、おいらのブログに珍しくトラックバックがついたことを確認しました。で、そのリンク先なのですが、中卒プログラマーmoceanstar君のブログ。

Mocean Star Blog – 中卒プログラマーの日記

http://d.hatena.ne.jp/moceanstar/

ちょっと目を通してみると、なにやら興味深い内容。17歳にして、コンパイラを作りたいとのことです。更に突っ込めば、いきなりコンパイラを作る前にリンカについて調査をするという、計画的犯行を模索しているみたいなんですね。

moceanstar君、おいらは満21歳なので、単純に4つ下ということになるんでしょうか…。ブログプロフィールを読む限り、謎が深いと同時に興味深いです。なんせ、おいらみたいに、純粋にプログラミング環境というヤツに真っ向から挑もうとする「物好き人間」、普通は見当たりません(というか、いません)。

えー、てなことでして、こちらからもせっかくトラックバックを仕掛けるんですから、リンカの作り方についておいらなりの見解を示しておきます。

現代のリンカはややこしいです。よって、ある程度調べただけでは、いっきにそいつを作り上げることはできません。moceanstar君のブログを拝見する限りでは、

リンカの製作

コンパイラの製作

開発環境として完成させる

みたいな流れを想定しているようです。コンパイラを作るより前の段階でリンカを知るという、一見すると合理的な計画のように見えます。が、しかし・・・・・

本人もお気づきのようですが、残念ながらMSDNにある技術文章(特にPEヘッダ及びCOFFの解説部)は、凡人が理解できる文章ではありません。おいらも7割程度は理解しているつもりですが、そのすべてにおいて知識をカバーできたかというと、全くそんなことはありません。更に言うと、MSDNは参考にするだけであり、あとは実際のコードを動かしてみて、試行錯誤を繰り返しながら、それらの値の真意を探る、という手法を先行させています。MSDN技術文章を勉強することはありません。こいつは参考にするものです。

幸いなことに、世の中には数え切れないほどの実行ファイルが存在しますし、自分のパソコンの中にもこれまた沢山のEXEファイル、DLLファイルが存在することでしょう。また、VisualC++、C++Builder、Delphiなど、純正のPEヘッダ、COFFヘッダを吐くリンカを持ち合わせる開発環境がゴロゴロしています。まずは、それら開発環境がどのような仕組みでヘッダを生成しているのかを調べてみると良いと思います。

多分、お持ちのことだと思いますが、eXeScopeというヘッダ解析ソフトが役立ちます。かれこれ2〜3年も前の話になってしまいますが、おいらは、このソフトとバイナリエディタと長い間生活を続けました(MSDN文章をマスターすることを思えば易しいのですが、頭がおかしくなることには変わりないです)。

eXeScope:

http://www.vector.co.jp/soft/win95/util/se072516.html

とにかく、コンパイラが生成するコードはデバッグできても、リンカが生成するヘッダ情報をデバッグすることはできません。結局のところ、リンカを1人だけで、しかも独学で作るのであれば、かなりセコいワザを駆使していかなければなりません。

PEヘッダ・COFFヘッダの構造体の汚さに驚かされたこと、意外と有名ではありながら限られた人間しか手にしないであろうLinkers&Loadersという参考書を買ったはいいが、この技術をたった一人でどうやって実現すればいいのか、道筋が立てられなくなったこと・・・・・こんな悩みを持つ人が近くにいると感じられただけでも、ホッとする瞬間でした。moceanstar君、影ながら応援してますわ〜