Immortal
-
Upload
doaki -
Category
Technology
-
view
2.296 -
download
2
description
Transcript of Immortal
immortalというモジュールを作ろうとしている話
2013/03/02闇 PHP 勉強会
do_aki
@do_aki
http://do-aki.net/
immortal
[ 形 ]1 死なない , 不死(身)の(⇔ mortal ) .2 不朽の;不滅の3 永久の , 不変の4 《生物》〈培養中の細胞が〉限りなく生長[分裂]する .
不死身
sample<?phpimmortalize();function I_will_be_back() { die("die!");}I_will_be_back();print “alive!";
掲載のコードはイメージです
実装
zend_set_user_opcode_handlerで ZEND_EXIT をフック
• zend_set_user_opcode_handler opcode => opcode の実行をフックできる関数 (Zend/zend_execute.c)
• ZEND_EXIT=> exit および die の opcode (Zend/zend_vm_opcodes.h)
ZEND_API int zend_set_user_opcode_handler( zend_uchar opcode, user_opcode_handler_t handler)
user_opcode_handler_t
• zend_execute_data *execute_data を引数にとって、 int を返す関数型
• 戻り値の int は Zend/zend_execute.h で定義された値– ZEND_USER_OPCODE_CONTINUE– ZEND_USER_OPCODE_RETURN– ZEND_USER_OPCODE_DISPATCH
etc…
zend extensionと
php extension• ロード時に探されるシンボルが異なる– zend : zend_extension_entry シンボル – php : get_module シンボル
• 大きな違いはないが、読み込まれるタイミングが違う
• zend_set_user_opcode_handler による opcode フックを実現するには、 zend extension として呼び出される必要がある。
今後
• 事前に登録した php の function を exit 時にコールするとか
• 例外起こしてみるとか
• ま、それ以前に、使い道探したいね
おしまい
おまけ• GNU Global の話が出てきたの
で、 htags のオススメのオプション
• htags -Faghnsv --tree-view --show-position –fD
• サーバに cgi 置いて検索できるようにしておくとすんげー便利