让我们说:
>>> def test(a):
>>> print a
Run Code Online (Sandbox Code Playgroud)
现在,我想探索测试在编译形式中的样子.
>>> test.func_code.co_code
'|\x00\x00GHd\x00\x00S'
Run Code Online (Sandbox Code Playgroud)
我可以使用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
Run Code Online (Sandbox Code Playgroud)
是否有一个开源和维护的反编译器,我可以用来将字节码重新转换成可读的python代码?
更新:感谢建议反编译,但它已过时(python2.3),没有人再维护它了.有没有python2.5或更高版本?
小智 6
UnPyc
http://sourceforge.net/projects/unpyc/
它是旧的解压缩的维护分叉,更新为2.5和2.6.
现在还有uncompyle6和更窄的decompyle3(适用于 Python 3.7 和 3.8,并且未打包)。这两个都是用 Python 编写的。还有用C++ 编写的pycdc。
它们处理从 Python 1 开始到 Python 3 版本的多个版本的 Python 字节码,除非上面另有说明。
您可能会考虑的另一件事是字节码解释器,它允许您跟踪和/或单步执行字节码指令。
为此,有x-python解释器和trepanxpy类似 gdb 的调试器。请参阅所解释的 Python 字节码版本以及运行解释器所需的 Python 版本的链接。
| 归档时间: |
|
| 查看次数: |
24226 次 |
| 最近记录: |