Development Tip

PHP의 opcode를 얻는 방법?

yourdevel 2020. 10. 27. 23:34
반응형

PHP의 opcode를 얻는 방법?


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

  ?>

opcode는 다음과 같습니다.

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

아웃 확인 발칸 논리 디스어셈블러 PECL 확장 - 참조 저자의 홈 페이지에 대한 추가 정보를 원하시면.

Vulcan Logic Disassembler는 Zend Engine에 연결되어 스크립트의 모든 opcode (실행 단위)를 덤프합니다. 인코더의 시작으로 작성되었지만 그럴 시간이 없었습니다. Zend Engine에서 무슨 일이 일어나고 있는지 확인하는 데 사용할 수 있습니다.

설치가 완료되면 다음과 같이 사용할 수 있습니다.

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

opcode 추출에 대한흥미로운 블로그 게시물사용 가능한 opcode를 나열하는 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) {
      [ "주소"] =>
      int (44682716)
      [ "opcode"] =>
      int (101)
      [ "opcode_name"] =>
      string (13) "ZEND_EXT_STMT"
      [ "플래그"] =>
      int (4294967295)
      [ "결과"] =>
      array (8) {
        [ "유형"] =>
        int (8)
        [ "유형 _ 이름"] =>
        string (9) "IS_UNUSED"
        [ "var"] =>
        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)
        [ "유형 _ 이름"] =>
        string (9) "IS_UNUSED"
        [ "var"] =>
        int (0)
        [ "opline_num"] =>
        문자열 (1) "0"
        [ "op_array"] =>
        문자열 (1) "0"
        [ "jmp_addr"] =>
        문자열 (1) "0"
        [ "jmp_offset"] =>
        문자열 (8) "35419039"
        [ "EA.type"] =>
        int (0)
      }

참고 URL : https://stackoverflow.com/questions/1795425/how-to-get-opcodes-of-php

반응형