对于python3到目前为止还没有一个稳定的工作反编译器。最接近的是unpyc3,它最好是buggy。我想创建一个可以为python工作的反编译器,但是我会怎么做呢?虽然我想在python中创建它,但有可能有一个可用于所有语言的全局反编译器?如果一个程序可以访问给定语言的所有库并且被赋予一个编译好的文件,那么可以将它分解成计算机可以执行的任何语言?它正在使用机器语言,所以在反编译中这个问题呢?反编译器python等
1
A
回答
0
uncompyle6是相当不错的工作为Python 3
至于你如何编写这样做一般,看到它的维基描述how it works问题。
但是我会概述下面的步骤。
您首先需要了解如何读取可执行文件,该文件可能包含特定CPU类型的机器代码或虚拟机的字节码。 Uncompyle6使用语法来重建程序。在解析术语“令牌”时调用反汇编的机器指令。例如,您可以使用“LOAD_CONST
指令,其值为5”而不是“标记:值为5的数字”。
在此之后,你可能想了解控制流程。对于通常的基本块或直线代码是确定的。你现在可以做到这一点,因为你grok哪些令牌是跳转指令。
uncompyle6使用的基本思想是将标记添加到语法中以允许语法检测控制流。所以大致它可能会看到:
SETUP_LOOP
JUMP_IF FALSE X
...
X:
而在X添加一些东西,以表明是结尾:
SETUP_LOOP
JUMP_IF_FALSE X
...
COME_FROM_LOOP # this is added
每个基本块,那么你就可以建立一个抽象语法树(AST)内的表达式和在基本块内的语句。在uncompyle6中使用的方法是使用上下文无关文法。其他Python3程序,如pycdc或程序unpyc3你引用不这样做。相反,然后使用堆栈构建树,并对指令进行线性扫描。给一些想法
LOAD a # tree/stack: | a
LOAD b # tree/stack: | b, a
LOAD c # tree/stack: | c, b, a
ADD # tree/stack: (c + b) | a
MULTIPLY # tree/stack: (c + b) * a
STORE d # tree/stack: d = (c + b) * a |
也许你可以看到一个语法将如何做同样的事情。
话虽如此,并建议uncompyle6,我会说,现在它是这在很大程度上是特设的控制流分析部分相当薄弱。
既然您表达了对创建反编译器的兴趣,那么如何改进现有编译器以使其更好?
相关问题
- 1. Java反编译器
- 2. MIPS反编译器
- 3. .dll反编译器
- 4. java反编译器
- 5. ANN反编译器?
- 6. 反编译Python 2.7 .pyc
- 7. Android L编译器防止反编译?
- 8. 关于编译器和反编译
- 9. 的Java反编译器和Java反编译
- 10. 如何理解我的vb反编译器已经反编译
- 11. Objective C反编译器
- 12. 反编译器在Xcode中?
- 13. java webstart反编译器
- 14. Google Closure反编译器?
- 15. Java,反编译器故障
- 16. netbeans的Java反编译器
- 17. Flash cs5反编译器?
- 18. LLVM 5.0编译器是否等同于GCC编译器?
- 19. g ++等效的编译器标志到VC++编译器标志
- 20. 使用unpyc3反编译Python 3.3 .pyc
- 21. 反编译APK
- 22. 反编译ipsw?
- 23. java反编译
- 24. 反编译IEnumerators
- 25. C#反编译
- 26. BAML反编译器/查看器
- 27. Exe&Dll分析器和反编译器
- 28. 如何反编译jd-gui反编译器无法反编译的Java类文件?
- 29. 如何我很感兴趣,像ILSpy或.net反射等反编译的C#反编译工作
- 30. python编译器包解释
python不编译... – mgilson
你的意思是你正在寻找一种方法来将python字节码(pyc文件)转换为python源代码? – Michael0x2a
是这就是我想要做的不是pyc文件编译python源? – user1775641