19

可以说我有:

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

现在,我想探索一下 test 在其编译形式中的样子。

>>> 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.3)并且没有人再维护它了。python2.5或更高版本有什么吗?

4

6 回答 6

6

解压

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 字节码,除非上面提到。

您可能会考虑的另一件事是字节码解释器,它允许您跟踪和/或步进字节码指令。

为此,有x-python用于解释器,而trepanxpy则有类似 gdb 的调试器。请参阅已解释的 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 反汇编器和反编译器,它将 Python 字节码(.pyc 或 .pyo)转换回等效的 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 回答