19

私が持っているとしましょう:

>>> def test(a):    
>>>    print a

ここで、テストがコンパイルされた形式でどのように見えるかを調べたいと思います。

>>> test.func_code.co_code
'|\x00\x00GHd\x00\x00S'

disモジュールを使用して逆アセンブル形式を取得できます。

>>> import dis
>>> dis.dis(test)
  2           0 LOAD_FAST                0 (a)
              3 PRINT_ITEM
              4 PRINT_NEWLINE
              5 LOAD_CONST               0 (None)
              8 RETURN_VALUE

バイトコードを読み取り可能な Python コードに戻すために使用できる、オープンソースで保守されている逆コンパイラはありますか?

更新: 逆コンパイルを提案してくれてありがとう。python2.5以降のものはありますか?

4

6 に答える 6

6

UnPyc

http://sourceforge.net/projects/unpyc/

これは、2.5 および 2.6 で動作するように更新された古い逆コンパイルの維持されたフォークです。

于 2009-07-19T10:00:58.583 に答える
5

github から uncompyle2 を入手してください。:)

于 2012-06-19T14:06:44.157 に答える
4

uncompyle6と、より狭いdecompyle3 (Python 3.7 および 3.8 用であり、パッケージ化されていません) もありますこれらは両方とも Python で書かれています。また、C++ で書かれたpycdcもあります。

これらは、上記の場合を除き、Python 1 から始まり、Python 3 バージョンに進む Python バイトコードのいくつかのバージョンを処理します。

考慮すべきもう 1 つのことは、バイトコード命令のトレースおよび/またはステップ実行を可能にするバイトコード インタープリターです。

このために、インタプリタ用のx-pythonと、そのための gdb のようなデバッガであるtrepanxpyがあります。解釈される Python バイトコードのバージョンと、インタープリターを実行するために必要な Python のバージョンについては、リンクを参照してください。

于 2016-05-25T14:50:35.063 に答える
2

Uncompyle2 は Python 2.7 で動作しました。

https://github.com/wibiti/uncompyle2

uncompyle2 の簡単な使い方、インストールしてから

>>>import uncompyle2
>>> with open("decompiled.py","wb") as f:
...   uncompyle2.uncompyle_file("compiled.pyc",f)

ソースコードを生成して decompile.py に戻します

于 2013-10-09T09:56:57.530 に答える
2

逆コンパイルする

Decompyle は、Python バイトコード (.pyc または .pyo) を同等の Python ソースに変換する Python 逆アセンブラーおよび逆コンパイラーです。生成されたコード (再コンパイル) の検証も利用できます。

于 2009-07-19T09:06:57.117 に答える
1

DevC が書いたものに加えて:

  1. Uncompyle2 は Python 2.7 で動作します

  2. Uncompyle2 を使用すると、コマンド ラインからアンコンパイルすることもできます。

    $ uncompyle2 コンパイル済み.pyc >> source.uncompyle2.py

  3. Uncompyle2 をインストールするには、

    $ git clone https://github.com/wibiti/uncompyle2

    $ cd uncompyle2

    $ sudo ./setup.py インストール

于 2014-01-26T16:30:29.683 に答える