Как получить коды операций PHP?



  <?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
386   2  

2 ответов:

Проверьте Вулканский Логический Дизассемблер расширение PECL-см. Домашняя страница автора для получения дополнительной информации.

крюки дизассемблера логики вулкана в двигатель Zend и сбрасывает все коды операций (исполнительные единицы) скрипта. Он был написан как начало Ан кодировщик, но у меня никогда не было времени для что. Он может быть использован, чтобы увидеть, что происходит в двигателе Zend.

после установки, вы можете использовать его как это:

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
));

вывод довольно подробный, поэтому вам нужно будет обработать его, чтобы получить ассемблерный формат.

  ["opcodes"]=>
  array(10) {
    [0]=>
    array(9) {
      ["address"]=>
      int(44682716)
      ["opcode"]=>
      int(101)
      ["opcode_name"]=>
      string(13) "ZEND_EXT_STMT"
      ["flags"]=>
      int(4294967295)
      ["result"]=>
      array(8) {
        ["type"]=>
        int(8)
        ["type_name"]=>
        string(9) "IS_UNUSED"
        ["var"]=>
        int(0)
        ["opline_num"]=>
        string(1) "0"
        ["op_array"]=>
        string(1) "0"
        ["jmp_addr"]=>
        string(1) "0"
        ["jmp_offset"]=>
        string(8) "35419039"
        ["EA.type"]=>
        int(0)
      }
      ["op1"]=>
      array(8) {
        ["type"]=>
        int(8)
        ["type_name"]=>
        string(9) "IS_UNUSED"
        ["var"]=>
        int(0)
        ["opline_num"]=>
        string(1) "0"
        ["op_array"]=>
        string(1) "0"
        ["jmp_addr"]=>
        string(1) "0"
        ["jmp_offset"]=>
        string(8) "35419039"
        ["EA.type"]=>
        int(0)
      }

Comments

    Ничего не найдено.