1

次のようなpythonスニペットがあります

5 + 6 * 8

これを AST にコンパイルすると、次のようになります。

>>> ast.dump(compile('5+6*8', '', 'eval', ast.PyCF_ONLY_AST))    
Expression(body=BinOp(left=Num(n=5), op=Add(), right=BinOp(left=Num(n=6), op=Mult(), right=Num(n=8))))

生成された AST6 * 8は48 に最適化されていないことに注意してください。

ただし、この生成された AST をコンパイルして逆アセンブルすると、6 * 8に置き換えられ48ます。

>>> astree = compile('5+6*8', '', 'eval', ast.PyCF_ONLY_AST)
>>> dis.disco(compile(astree, '', 'eval'))
  1           0 LOAD_CONST               0 (5)
              3 LOAD_CONST               3 (48)
              6 BINARY_ADD          
              7 RETURN_VALUE 

私の質問

一定の折り畳みの最適化なしでコードをバイトコードにコンパイルする方法は? 難読化ツールを開発するには、これを行う必要があります。

4

0 に答える 0