GNU Development Toolsが良書すぎてヤバい
gcc hoge.c
ってするとa.out
ができて実行できて、まぁなんて C プログラミングって簡単なんでしょう!ってレベルのプログラム力しかないんですが、何の因果かそれがどうやって動いてるのか/できてるのかが気になり始めるお年頃を迎えてしまっている riywo です。情弱です。
この記事を書いてる時に、そもそも動的リンクとか静的リンクとか、概念的にはぼやっと分かってるつもりだけど、細かいことなんにも知らないなーやばいなーって思ってたら、mizzy さんが「GNU Development Tools」という本を教えてくれました!ありがとうございます!
この本は自費出版されている本で、すでに上記サイトでは取り扱いがなく、絶版状態で困ってしまいましたが、色々探していくとどうやら地方のジュンク堂には在庫が残っていそうということが分かりました。運良く@Spring_MT さんが天神のジュンク堂で見つけてくれたので、購入して頂いて送って頂きました!ありがとうございます!
というわけで、念願の本を読むことができたのですが、やばかった。ELF とか全然しらない僕でさえ前から順番に読んでいけば一体gcc hoge.c
が何をやっているのか、分解して学ぶことができました。
内容はまさに教科書で、必要十分なエッセンスに削ぎ落とされた解説によって、gcc ドライバがやっている 4 つの工程「プリプロセス」「コンパイル」「アセンブル」「リンク」を自分の手で丁寧にマニュアルで実行できるようになっていきます。実行結果も含まれているので電車の中でこの本だけで十分に学習できますし、もちろんコンピュータで実行しながらでもいいと思います。
余計な内容がなくて、ただひたすらに Hello World なプログラムのバイナリの生成プロセスを理解することだけにフォーカスされているので一本道で理解できるのが素晴らしいと思いました。あぁ、こういう本にもうちょっとプログラムの初期段階で出会えていれば、、、とも思いました。
もうなんか逐一書いてしまいたい感じなんですが、著作物ですし詳細は書きません。入手困難なのがとても惜しいのですが、それでも読みたいってくらいの根性ある人はぜひ頑張って手に入れて読んでみるといいと思います。特に「この辺興味はあるんだけど体系的に勉強したことなくて怖い」って思ってる人にはオススメです。相当自信がつきます。
というわけで僕は自信がついたので、Linkers&Loaders とか Binary Hacks とかに手を出していこうかと思います。(何の役に立つのかは不明ですが、、、、知りたい。。。)
著者の西田さんには本当に感謝です。とてもとてもとてもとても素晴らしい本なので、ぜひとも電子書籍などでリーチしやすくして頂ければなぁと思っています。