Frage

  <?php
      $show_value   = 123;
      echo 'sing_quote'.$show_value;
      echo "double_quote{$show_value}";

  ?>

Der Opcode ist:

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
War es hilfreich?

Lösung

Schauen Sie sich die Vulcan Logic Disassembler Erweiterung PECL - siehe Homepage des Autors für weitere Informationen.

  

Die Vulcan Logic Disassembler Haken   in die Zend Engine und lädt alle   OP-Codes (Ausführungseinheiten) eines Skripts.   Es wurde als als Beginn einer schriftlichen   Encoder, aber ich habe nie die Zeit für   Das. Es kann zu sehen, verwendet werden, was   los in der Zend Engine.

Nach der Installation können Sie es wie folgt verwendet werden:

php -d vld.active=1 -d vld.execute=0 -f yourscript.php

Siehe auch diese interessante Blog-Post auf Opcode Extraktion und dem PHP-Handbuch Seite mit einer Liste der verfügbaren Opcodes .

Andere Tipps

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

Die Ausgabe ist recht ausführlich, so dass Sie es verarbeiten bräuchten Assembler-ähnliches Format zu erhalten.

  ["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)
      }
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top