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_filezend_op_arrayへのポインタを返すことが分かります。 つまり、zend_compile_fileをフックして適当にzend_op_arrayを生成して返してやれば、任意のコードが実行できそうです。 これは夢が広がります。

続きは次回