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

2,808 views

Published on

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
2,808
On SlideShare
0
From Embeds
0
Number of Embeds
787
Actions
Shares
0
Downloads
3
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

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置いて検索できるようにして おくとすんげー便利

×