不思議な17歳??
abdev 6月 20th, 2005数日前、おいらのブログに珍しくトラックバックがついたことを確認しました。で、そのリンク先なのですが、中卒プログラマー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君、影ながら応援してますわ〜
6月 21st, 2005 at 23時11分11秒
トラックバックされててびっくりしました。しかも内容はすごい個人宛て(笑)。実はネイティブコードを吐く前からActive Basicの存在は知っていて、あるときふと公式ページを見てみるとネイティブコードを吐くようになっていたのは、正直おどろきましたね。そのときはネイティブコンパイラなんて、それこそ許されし者だけが作れるレベルだと思っていたので、かなり尊敬してしまいました。その当時の僕は、コンパイラのコの字も知らなかったので、自作のネイティブコンパイラを作ろうとは思いつつも何からはじめたらいいのかわかりませんでした。それから一・二年過ぎて、ようやくネイティブコンパイラの基本構造がわかってきたのです。そこで思い切って「プログラミング言語を作ろう」プロジェクトをBlog上ではじめたわけですが、はじめてみるとあまりの資料不足に困ってしまいました。MSDNの文章は何を言っているのかわかりづらいですし、「なにをすればいいのか」ということが全く書いてありません。こうなると、ご指摘どおり自分で資料から自分なりの推測を持ってTry&Errorを繰り返すしかなくなります。もがき苦しみながらなんとか全体像はつかめたんですが、まだまだ実装できるほどまで理解していません。exeScopeはちゃんとインストールされていますね。そのほかにもOllyDbgやStiringなど解析ツールは一式そろってます。exeScopeはIMAGE_SECTION_HEADER.PointTo〜のデータをHexで表示できたらもっといいんですがねぇ。長くなりましたが、大先輩である山本さんからコメントをもらえたというのはかなり励みになります。それにお互いいろいろな情報交換ができたらお互いのスキルの向上につながっていいですね。まだまだ「プログラミング言語を作ろう」プロジェクトは続きますので(牛歩ですが)、もしよろしければ大先輩から間違いの指摘やコメントがいただけるとうれしいです。僕もたびたびこちらのブログに登場しますので、よろしくお願いします。お互いがんばりましょう!では。