有哪些工具或库可以反编译Python并探索字节码?
假设我有:
>>> 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代码呢?
更新:感谢你推荐decompile,但它已经过时了(是python2.3的),而且没人再维护它了。有没有适用于python2.5或更高版本的工具呢?
6 个回答
5
现在有一个叫做 uncompyle6 的工具,还有一个更专门的 decompyle3(适用于 Python 3.7 和 3.8,但没有打包)。这两个工具都是用 Python 写的。另外,还有一个用 C++ 写的工具 pycdc。
这些工具可以处理多个版本的 Python 字节码,从 Python 1 到 Python 3 的版本都有,除了上面提到的特殊情况。
你还可以考虑使用字节码解释器,这样可以逐步跟踪字节码指令。
为此,有一个叫 x-python 的解释器,还有一个类似 gdb 的调试工具 trepanxpy。可以查看这些链接,了解哪些 Python 字节码版本可以被解释,以及运行解释器需要哪些 Python 版本。
5
从GitHub上获取uncompyle2吧!:)
6
UnPyc
http://sourceforge.net/projects/unpyc/
这是一个更新版的工具,叫做UnPyc,它是旧版decompyle的一个分支,专门用来处理Python 2.5和2.6版本的代码。