* 10:05 世界樹の迷宮、その6
B6F制覇、白いクリスタルの扉を開けられるようになった。
続けてB7F進出中\。
全員Lv24。リエル(医)がエリアキュア習得、及びリフレッシュの Lv 上げ中。毒痛すぎ。
Mitsuki's Magic Laboratory
Since 2002.09.14
* 10:05 世界樹の迷宮、その6
B6F制覇、白いクリスタルの扉を開けられるようになった。
続けてB7F進出中\。
全員Lv24。リエル(医)がエリアキュア習得、及びリフレッシュの Lv 上げ中。毒痛すぎ。
Posted at 2007/04/01 16:15 in Unix
DSAS開発者の部屋:なぜ apache module を更新すると Segmentation fault するのかを読んで最初に思ったのは、なんで .so の上書きそのもので "Text file busy" にならないんだろーという点。
*1)昔の商用 UNIX は exec(2) しててもそのまんま書き込めたので、実行中の(.soではない)実行ファイルを上書き cp して SEGV なんてイベントがそれなりにあったらしい。
*2)Windows は EXE も DLL も実行中は書き込みロックされるので、そちらからの連想もある。
というわけで、実行環境が手元になかったので、何故か手元にあった FreeBSD のソースを眺めてみた。
FreeBSD6 の場合、exec(2) した際に実行バイナリファイルを指す vnode に VV_TEXT フラグが付くので(src/sys/kern/kern_exec.c)、open(2) などファイルを変更する可能性のあるシステムコールではこれの有無をチェックして、VV_TEXT付きなら ETXTBSY を返す模様(src/sys/kern/vfs_vnops.c)。その結果 "Text file busy" のエラーになる。
じゃあ dlopen(3) はというと、実行バイナリを O_RDONLY で open(2) して mmap(2) してるものの(libexec/rtld-elf/rtld.c)、VV_TEXT をセットしている様子はない。って、RTLD はユーザーコードなので付けようがないと思い直して、なら mmap(2) が PROT_EXEC のときに付けたりしてないかなーと思ったけど、特にそういう処理はしてないぽい。そもそも VV_TEXT の付加処理自体 exec(2) と LKM 関連でしか使ってなさげ。
帰宅して実際の環境で動作中の .so を適当なファイルで上書きしてやると、見事撃墜成功。うーん……。
Linux の場合はこんな事例があった。ってそういえば livepatch とか調べた時に読んだような気がする。
exec(2) 中に上書きできなくなったのはセキュリティ的な理由(実行中にパッチ当てられても困る)と認識してたんだけど、.so が上書きできるんじゃ意味ないような気がする……なんか理由でもあるのかなあ。
というようなことを金曜にやってた。
* 10:50 世界樹の迷宮、その5
スノードリフトを倒してB5F制覇。全員 Lv18。
というわけで第一階層クリア。やっと樹海磁軸が使えるように。
* 01:40 世界樹の迷宮、その4
B4F制覇、B5Fのスノードリフトの巣まで到達。全員Lv16。
アレックス(剣)がボアスピアソードとかいう、剣なんだか槍なんだかな武器をゲット。今までになく強力。
リエル(医)がキュア3を習得、カリン(弓)がアザーズステップを習得。後者は一人クイックタイムとでも言うか、まだ使ってないけどFOE戦で便利そう?