<?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) }