Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
immortalというモジュールを作ろうとしている話            2013/03/02          闇PHP勉強会               do_aki
@do_akihttp://do-aki.net/
immortal[形]1 死なない, 不死(身)の(⇔mortal).2 不朽の;不滅の3 永久の, 不変の4 《生物》〈培養中の細胞が〉限りなく生長[分裂]する.
不死身
<?php           sampleimmortalize();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/z...
ZEND_API intzend_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 extension               と         php extension• ロード時に探されるシンボルが異なる – zend : zend_extension_entry シンボル – php : get_mod...
• zend_set_user_opcode_handler による  opcode フックを実現するには、zend  extension として呼び出される必要がある。
今後
• 事前に登録した phpの function を exit 時に  コールするとか• 例外起こしてみるとか• ま、それ以前に、使い道探したいね
おしまい
おまけ• GNU Global の話が出てきたので、htags の  オススメのオプション• htags -Faghnsv --tree-view --show-position –  fD• サーバにcgi置いて検索できるようにして  おくと...
Upcoming SlideShare
Loading in …5
×

Immortal

  • Login to see the comments

  • Be the first to like this

Immortal

  1. 1. immortalというモジュールを作ろうとしている話 2013/03/02 闇PHP勉強会 do_aki
  2. 2. @do_akihttp://do-aki.net/
  3. 3. immortal[形]1 死なない, 不死(身)の(⇔mortal).2 不朽の;不滅の3 永久の, 不変の4 《生物》〈培養中の細胞が〉限りなく生長[分裂]する.
  4. 4. 不死身
  5. 5. <?php sampleimmortalize();function I_will_be_back() { die("die!");}I_will_be_back();print “alive!"; 掲載のコードはイメージです
  6. 6. 実装
  7. 7. 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)
  8. 8. ZEND_API intzend_set_user_opcode_handler( zend_uchar opcode, user_opcode_handler_t handler)
  9. 9. 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…
  10. 10. zend extension と php extension• ロード時に探されるシンボルが異なる – zend : zend_extension_entry シンボル – php : get_module シンボル• 大きな違いはないが、読み込まれるタイ ミングが違う
  11. 11. • zend_set_user_opcode_handler による opcode フックを実現するには、zend extension として呼び出される必要がある。
  12. 12. 今後
  13. 13. • 事前に登録した phpの function を exit 時に コールするとか• 例外起こしてみるとか• ま、それ以前に、使い道探したいね
  14. 14. おしまい
  15. 15. おまけ• GNU Global の話が出てきたので、htags の オススメのオプション• htags -Faghnsv --tree-view --show-position – fD• サーバにcgi置いて検索できるようにして おくとすんげー便利

×