2006年時点で購入済だったのだけれど、ちゃんと読んでいなかった。大学時代にInterface誌などでおおよそは把握していたから・・・という慢心もあった。 ちゃんと読み直してみたら、3年も経過してgccやbinutilsのバージョンも上がり、多少躓くところもあったものの全体として・・・「あれ、もう読み終わり?」という感じだった。Interface誌やUNIX USERで感銘を受けたLinuxカーネルのMakefileの解析やブートコードの解析、さらにシステムコールを直接呼ぶことでlibcの呪縛から解放された80バイトの"Hello, World"の作成などまでは立ち入っていない為、物足りない・・・。 躓いたところはここ。gccのバージョンアップの影響で静的リンクに必要なオブジェクトファイルが変更されていた為書籍通りに行かなかった。 - 日記/2009/11/28/gccでstaticリンクさせようと手動でldコマンド動かしたメモ -- http://www.glamenv-septzen.net/view/503 実はInterface誌(2002年7月号)やEmbedded UNIX誌は引っ越す前に古本で処分してしまって、さらにUNIX USERでの"GCCプログラミング工房"の連載のコピーも廃棄してしまい・・・ああ~~~なんであの貴重な雑誌資料を廃棄するのかな~~~!!!なんて馬鹿な自分・・・!! Embedded UNIXについては先日、ちょうど西田氏の連載が載っている分だけ(Vol1, Vol2, Vol6)がヤフオクに出ていたので速攻で落札。 問題はInterface誌2002年7月号の特集記事なのだけれど、取り戻したEmbedded UNIX誌や「BINARY HACKS」、「ふつうのコンパイラを作ろう」、「Linuxのブートプロセスを見る」(ASCII)などで上手く補完できるかもしれない。最悪、まだAmazonでInterface誌の2002年分のCD-ROM縮刷版が存在するのでこれを入手するほか無い・・・。でも縮刷版なだけあり、お値段もそれなり・・・。 とりあえずELFのノウハウやlibcからの解放はBINARY HACKSの方でも載っているし、Embedded UNIX Vol.6 にも載っている。BusyBoxについてはEmbedded UNIX Vol.1に、kernelのビルド部分の解説は同Vol.2のそれぞれ「Linuxシステム縮小化計画」に載っている。ルートファイルシステムの構築などその辺りは同Vol.6に。 さらに先日手に入れた組み込みLinux系の書籍ではソースツリーの構成やMakefileの中身、bzImageやブートローダからInitial RAMDISKの話まで網羅されている。それに「Linuxのブートプロセスを見る」(ASCII)を併せれば一通り網羅できるはずだ。 ld.soあたりが気になるけど、そこは「ふつうのコンパイラを作る」を読み込む必要があるかも知れない。あとはBSD系のソースを調べるとか、それこそld.soのソースを追うとかしないとだけど・・・これはかなりエネルギーが入りそう。 最終目標はPHPに対してコマンドライン引数からシェルコードをexploitする事なんだけど、そのためにはシェルコードのexploitの基礎を勉強しておきたい。そのためにはある程度、「任意のバージョンのLinuxカーネルとglibcを自由に組み合わせて環境構築できる」ようになっておきたいので、スゴイ回り道をする事になる。 けどまぁ、これが出来るようになれば多分折り返し地点は過ぎていると思うので、マイペースで頑張ろう・・・。