第17回 IT基礎技術勉強会に参加してみました

第17回 IT基礎技術勉強会「Assembler, Kernel, Binary 勉強会」に参加してみました。
この勉強会はKOZOSという学習向け自作組み込みOSを開発されている@kozossakaiさんが開催しているものです。

なぜこの勉強会に参加しようかと思ったかは、FreeBSDを使っていることと、いわゆる「Hello World」を追ってみるというこれまでやったことがない題材だったからです。
アセンブラはZ80とかである程度経験はありますが、そのあたりの知識があればカーネル内部まで追うことができるのかも興味がありました。
準備としてFreeBSD-8.3をノートPCにインストールする必要がありましたが、VMwareを使って準備しておきました。WindowsのTeraTermからVMwareのFreeBSDにログインすることができますので、少し古いThinkPad X61sでも問題ありませんでした。
会場には無線LANのAPやFreeBSDサーバ環境も準備されていましたが、私はネットワークには接続せずにすべてローカルで進めました。
勉強会ではアセンブラに慣れることからはじまりましたが、基本的なCのプログラムを静的コンパイルして、できた実行ファイルをobjdump -d で逆アセンブルした結果を追ってみるという方法でした。確かにこの方法であれば引数の受け渡しや戻り値や関数呼び出しがどのように扱われているのかがよくわかりました。
その知識を前提として、いよいよhello.cをコンパイルしてそれを追っていきました。この中でいろいろなテクニックを交えてどんどん深く追いました。gdbのステップ実行を使ってint 80hのソフトウェア割り込みからカーネルの内部まで追うことができました。また、実際にシステムコールを行っているところをreadelf -aで出力したシンボル情報からバイナリのどの場所であるかを特定し、hexeditでNOPに書き換えることでその処理が行われなくなることも確認できました。
最後にFreeBSDとLinuxでのシステムコールの呼び方の違いにも触れることができ、こういうところがパフォーマンスとかに影響しているのかなとも少しわかったように思います。
一番印象に残ったのは「アセンブラは細かいところまでは見ないでざっと見ればよい」ということです。確かにそのやりかたで思っていたより簡単に追うことができました。
あとは講師のかたの進行スピードが相当速かったのである程度の前提知識がないと厳しかったかもしれません。でもこの内容を2時間で収めるためにはやむをえないでしょう。しかし非常に充実した内容だったことには違いありません。
次回はARMを素材にして同様のことを行ってみるそうなのでまた申し込んでおきました。

コメント

タイトルとURLをコピーしました