先日、Binary 2.0カンファレンスというイベントがありました。最近Web 2.0というキーワードが流行していますが、それに便乗したイベントです。Binary 2.0に特に定まった定義はなく、コンパイラやインタプリタよりも低位のレイヤーとなる実行バイナリに関連した話題が数多くでました。
実行バイナリやシェアードオブジェクトといったものに触れるとなると、どうしてもOSなどの環境に依存せざるをえません。こういう話になると、必ず「Linuxではこうすればできる」という例が出てきます。
今回のカンファレンスを通じて感じたのは、Linuxのproc filesystemの強力さでした。通常、/procというディレクトリにマウントされている仮想ファイルシステムなのですが、その下に現在実行されているプロセスIDと同じ名前のディレクトリがあり、その下にその対応するプロセスに対するさまざまな情報がファイルとして見えるようになっています。
たとえば、mapsというファイル名をcatコマンドで出力させると、そのプロセスがメモリ上にmmapシステムコールによってマップしているファイルのパスとアドレスを得ることができます。Binary 2.0カンファレンスの発表の中では、この情報を用いて情報をたぐるといったことをしている方がいました。
残念ながらprocファイルシステムに関して詳しく記述した解説はあまり多くはありません。若干古い情報ですが、Linux 2.2カーネルに関してはJFに翻訳された文章があるので、それなりに参考になると思います。
(著者:野首)
Copyright 2005 Japan Linux Association
このblogは株式会社グッデイ のサービスを利用しています。