strip_tags - ¿Cómo obtener códigos de operación de PHP?
strip_tags() (2)
<?php
$show_value = 123;
echo ''sing_quote''.$show_value;
echo "double_quote{$show_value}";
?>
Su código de operación es:
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
Consulte la extensión PECL de Desensamblador de lógica de Vulcan : consulte la página de inicio del autor para obtener más información.
El Desensamblador Lógico de Vulcan se engancha al Zend Engine y vacía todos los códigos de operación (unidades de ejecución) de un script. Fue escrito como el comienzo de un codificador, pero nunca tuve tiempo para eso. Se puede usar para ver qué está pasando en el motor Zend.
Una vez instalado, puede usarlo así:
php -d vld.active=1 -d vld.execute=0 -f yourscript.php
Consulte también esta interesante publicación de blog sobre extracción de código de operación y la página del manual de PHP que enumera los códigos de operación disponibles .
Parsekit tiene 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 ));
El resultado es bastante detallado, por lo que necesitaría procesarlo para obtener un formato similar a ensamblador.
["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) }