[英]Byte code to Java source code
是否可以将.class
文件转换为.java
文件?
如何才能做到这一点?
从此选项中提取的代码的正确性如何?
有可能的。 您需要Java Decompiler才能执行此操作。
你会发现它主要是做得非常出色。 您将获得的是一个有效的.java
文件,它将编译为.class
文件,但此.java
文件不一定与原始源代码相同。 循环结构之类的东西可能会有所不同,并且不会重新创建任何编译时间,例如泛型和注释。
如果代码已被混淆,则可能会出现问题。 这是一个改变类文件以使其难以反编译的过程。 例如,类名和变量名都变得相似,所以你最终会得到像aa.a(ab)
这样的代码而不是employee.setName(name)
并且很难弄清楚发生了什么。
我记得使用JAD来做这件事,但我不认为这是积极维护的,所以它可能不适用于从未版本的Java。 谷歌搜索java反编译器会给你很多选择。
这可以使用一个可用的Java反编译器 。 由于您使用的字节代码可能已经被编译器优化(内联静态变量,重构控制流等),因此您获得的内容可能与最初编译的代码不完全相同,但它在功能上是等效的。
加上以前的答案:最近,新的反编译浪潮即将来临,即Procyon,CFR,JD,Fernflower
以下是截至2015年3月的现代反编译器列表:
您可以在线测试上面提到的反编译器,不需要安装,并做出自己的教育选择。 云中的Java反编译器: http : //www.javadecompilers.com/
它总是可能的。 搜索“java反汇编程序”。
但是源代码注释和临时变量将不可用。
如果您反编译一个类,并且看到代码太复杂,变量名称和方法名称就像a,b,c ......这意味着项目被混淆了。
不完全是反编译器,但JDK包含javap,一个反汇编程序 :
javap -c org.example.MyClass
根据您的使用情况,了解或使用它可能仍然很有趣。
请注意,类文件反编译的结果取决于类文件中包含的信息。 如果我没记错的话,包含的调试信息( 参见javac的-g标志 )很重要,特别是对于变量的命名等。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.