PHPをハックしよう(第一回)
2014-10-21
私はPHPが嫌いです。
<?php
とか先頭に書く必要があったり、コードが冗長だったりと、個人的にはイラっとくる言語なんです。
でも、PHPにはすばらしいプロダクトがたくさんありますね。
Wordpressとか。 Wordpressとか。 Wordpressとか。
。。。Wordpressしかぱっとは出てきませんでしたが、PHPにはすばらしいプロダクトやフレームワークがあって、PHPでやらなくちゃいけない案件が結構あったりするんです。
いつも思うんです。 PHPをrubyとか他の言語で書けたらな、と。 でも、rubyで書いてそれを単にPHPにコンバートとか、そういうのではダメなんです。 それだと単に煩雑になるだけですからね。
PHPはよく知らないんですが、ちょっと調べてみると、PHPは内部でopcodeというものに変換されるようですね。
opdumperというPHP拡張を発見しました。
これはopcodeを出力してくれるPHP拡張で、内部でPHPをコンパイルしているzend_compile_file
という関数を置き換えてopcodeを出力しています。
使い方は簡単で、
$ git cloen https://github.com/ericzhang-cn/opdumper.git
$ cd opdumper
$ phpize
$ make
$ make install
$ php -d opdumper.active=1 foo.php
という感じで使えます。
このツールのコードをのぞいて見ると、コンパイルすると、関数zend_compile_file
がzend_op_array
へのポインタを返すことが分かります。
つまり、zend_compile_file
をフックして適当にzend_op_array
を生成して返してやれば、任意のコードが実行できそうです。
これは夢が広がります。
続きは次回。