ホームページ  >  記事  >  バックエンド開発  >  PHP Embed SAPI を使用してオペコード ビューアを実装する方法、sapiopcodes_PHP チュートリアル

PHP Embed SAPI を使用してオペコード ビューアを実装する方法、sapiopcodes_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-12 09:05:15801ブラウズ

PHP Embed SAPI を使用して Opcode ビューア、sapiopcodes を実装する方法

PHP は Embed SAPI を提供します。つまり、PHP では、PHP/ZE が提供する関数を C/C++ 言語で呼び出すことができます。この記事では、Embed SAPI に基づいた PHP オペコード ビューアを実装します。

まず、コンパイル用のPHPソースコードをダウンロードします。私は現在PHP5.3 alpha2を使用しています

ソースコードディレクトリを入力してください:

./configure --enable-embed --with-config-file-scan-dir=/etc/php.d --with-mysql --with-config-file-path=/etc/
./作る
./make install

最後に、生成された libphp5.so をランタイム ライブラリのディレクトリに忘れずにコピーしてください。私はそれを /lib/ に直接コピーしました。そうしないと、独自の埋め込みプログラムを実行するときにエラーが報告されます。

./embed: 共有ライブラリのロード中にエラーが発生しました: libphp5.so: 共有オブジェクト ファイルを開けません: そのようなファイルまたはディレクトリはありません

PHP の SAPI に詳しくない場合は、私の記事「Zend SAPI の詳細な理解 (Zend SAPI 内部)」を読むことをお勧めします

この時点で、C コードに PHP スクリプト パーサーを埋め込むことができます。私の例:
リーリー


次に、単純な Makefile であるインクルード パスを指定する必要があります

リーリー

コンパイルと実行が正常に完了すると、標準出力に Hello World! が出力されることがわかります。

これに基づいて、vld に似たオペコード ダンパーを簡単に実装できます。

まず、オペコード変換関数を定義します (すべてのオペコードは Zend/zend_vm_opcodes.h で確認できます)。 リーリー
次に、zval と znode の出力関数を定義します。

リーリー

次に、op_array の出力関数を定義します。

リーリー

最後に、プログラムの主な関数があります:

リーリー

テスト スクリプト (sample.php) をコンパイルして実行します:

コードをコピーします コードは次のとおりです: サンプル.php: エコー「ラルエンス」;


コマンド:

コードをコピーします コードは次のとおりです: ./opcodes_dumper サンプル.php

出力結果を取得します (次の結果に混乱している場合は、私の記事「PHP 原則の深い理解: オペコード」を読むことをお勧めします):

スクリプト:sample.php


最適な行 結果

0 0 2 ZEND_ECHO "ラルエンス"

1 4 1 1
ZEND_RETURN
ふふ、どうですか?

http://www.bkjia.com/PHPjc/1069344.html

tru​​ehttp://www.bkjia.com/PHPjc/1069344.html技術記事 PHP Embed SAPI を使用して Opcode ビューアを実装する方法、sapiopcodes PHP は Embed SAPI を提供します。つまり、PHP では、PHP/ZE が提供する関数を C/C++ 言語で呼び出すことができます。この記事は合格です...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。