<?php $show_value = 123; echo 'sing_quote'.$show_value; echo "double_quote{$show_value}"; ?>
Его код операции:
1: <?php 2: $show_value = 123; 0 ASSIGN !0, 123 3: echo 'sing_quote'.$show_value; 1 CONCAT 'sing_quote', !0 =>RES[~1] 2 ECHO ~1 4: echo "double_quote{$show_value}"; 3 ADD_STRING 'double_quote' =>RES[~2] 4 ADD_VAR ~2, !0 =>RES[~2] 5 ECHO ~2 6 RETURN 1
Ознакомьтесь с расширением PACL Vassic Logic Disassembler – см . Домашнюю страницу автора для получения дополнительной информации.
Разборщик Vulcan Logic разворачивается в Zend Engine и сбрасывает все коды операций (исполнительные элементы) скрипта. Это было написано как начало кодировщика, но у меня не было времени на это. Его можно использовать, чтобы увидеть, что происходит в Zend Engine.
После установки вы можете использовать его следующим образом:
php -d vld.active=1 -d vld.execute=0 -f yourscript.php
См. Также это интересное сообщение в блоге об извлечении кода операции и страницу руководства PHP, в которой перечислены доступные коды операций .
Parsekit имеет parsekit_compile_string () .
sudo pecl install parsekit
var_dump (parsekit_compile_string (<<< PHP
\ $ show_value = 123;
echo 'sing_quote'. \ $ show_value;
echo "double_quote {\ $ show_value}";
PHP
));
Результат довольно подробный, поэтому вам нужно обработать его, чтобы получить ассемблерный формат.
[ "Опкоды"] =>
array (10) {
[0] =>
array (9) {
[ "Адрес"] =>
INT (44682716)
[ "Опкод"] =>
INT (101)
[ "Opcode_name"] =>
строка (13) "ZEND_EXT_STMT"
[ "Флаги"] =>
INT (4294967295)
[ "Результат"] =>
array (8) {
[ "Тип"] =>
Int (8)
[ "Type_name"] =>
string (9) "IS_UNUSED"
[ "Переменная"] =>
Int (0)
[ "Opline_num"] =>
строка (1) "0"
[ "Op_array"] =>
строка (1) "0"
[ "Jmp_addr"] =>
строка (1) "0"
[ "Jmp_offset"] =>
строка (8) "35419039"
[ "EA.type"] =>
Int (0)
}
[ "OP1"] =>
array (8) {
[ "Тип"] =>
Int (8)
[ "Type_name"] =>
string (9) "IS_UNUSED"
[ "Переменная"] =>
Int (0)
[ "Opline_num"] =>
строка (1) "0"
[ "Op_array"] =>
строка (1) "0"
[ "Jmp_addr"] =>
строка (1) "0"
[ "Jmp_offset"] =>
строка (8) "35419039"
[ "EA.type"] =>
Int (0)
}