第1回ローレイヤー勉強会
行ってきた。
kanaiさん面白い場を提供していただきありがとうございました。
以下自分用メモ。
Linux Kernel Hacking
http://d.hatena.ne.jp/rootkit/20081125/1227639297
最初の一歩のやり方ってなかなかわからないもんです。あと、他の人が使っている便利テクニックを鑑賞できるというのも良いですね。
vmlinuxについて
(gdbで)カーネルのシンボリックデバッグをするときに使う。要するに非圧縮のELFファイル。
カーネルのビルドってLinuxだと当たり前の作業ではあるけど、スムーズにできるようになるまでには知識が必要で、make zImageとは何ぞやとか色々謎がある。
http://d.hatena.ne.jp/takihiro/20080617/1224331959
512KBの壁とか色々ありますなあ。ブート周りも変なテクニックが満載で面白そう。
カーネルモジュールのビルド方法
自分のモジュールを、ソースチェインに組み込まずにビルドする方法は
make -C /lib/modules/2.6.18-prep/build/ SUBDIRS=~/hello modules
という感じらしい。初めて知った。
Windowsカーネルハック
http://d.hatena.ne.jp/egggarden/20081123
資料が100ページ以上あるとか…そのまま本にできそうな内容。
サービスのロード方法
基本はCreateService()で、以前は裏技としてNtSetSystemInformation()でもいけた。
どうやるのか不明だが、「このデバイスのドライバはコンピュータの再起動時にアンインストールされます。そのデバイスに行った変更は保存されません」と表示されるものがある。ドライバの詳細も表示されず、メモリ上にのみ存在させることができるようだ。要調査。
C++でドライバ
「いちいち型を指定するのがめんどいのでマクロ」と言っていたのでソースを見たらHOOK_SYSCALLがテンプレートになっていて感動した。
フックについて
InterlockedExchangeの戻り値を代入する方法。
これが安全かどうかという質問があったのだが、交換処理自体は安全だが、戻り値を代入する命令の前でコンテキストスイッチ(あるいは別のプロセッサによる実行)が起きる可能性がある場合は使えないのではないかと思われる。