2011-11-30 5 views
10

Как я могу написать PHP opcode, сохранить его в файле и заставить Zend Engine выполнить его? Любой метод или взлом приветствуются, если он делает трюк.Написание PHP-кода и его выполнение. Как сделать?

+3

Что такое опкод? – abcde123483

+2

попробуйте google it :) – Raffael

+0

на «нет благих намерений ответы, которые точно не направлены на [вопрос]». Являются ли жалкие или сердитые ответы, которые не затрагивают вопрос приемлемым? – halfer

ответ

4

Существует несколько методов пространства пользователя (из плагинов), которые могут иметь дело с Opcodes.

Ни производит простой текст, однако, поскольку опкоды не предназначены быть пользователем перезаписываемого языка (в отличии от Parrot).

+0

Это означает, что я могу перезаписать кешированный файл с apc_bin_load, я думаю ... поэтому следующий вопрос будет заключаться в том, как симпатичные операторы opcode относятся к фактически используемому двоичному представлению. Вы что-то знаете об этом? ссылки или так? – Raffael

+0

http://stackoverflow.com/questions/1795425/how-to-get-opcodes-of-php имеет некоторую информацию, в основном ссылаясь на «Vulcan Logic Dumper» - http://pecl.php.net/package/vld –

0

Существует расширение, называемое ulopcodes, которое позволяет вам генерировать собственные коды операций с помощью функции, которую она предоставляет PHP-коду.

Например:

ulopcodes_emit(ZEND_ECHO, "Hello world!"); 

Создаст эту строку в текущем oparray, которая будет выполнена в VM.

Данное расширение является чисто образовательным и не предназначено для использования в производственном коде.

(Отказ от ответственности: Я создатель ulopcodes)

+0

есть ли расширение для экспорта кодов операций? – kodmanyagha

+0

Да, вы можете использовать [vld] (https://github.com/derickr/vld), например, для вывода сгенерированных кодов операций. – pmmaga