1

我正在尝试找到一个类似于 swf-decompiler 的 Java 反编译器,它允许编辑和重新编译源代码,而无需将其导出到任何地方,也无需执行任何外部操作。我想要的是非常快速地对 .jars 应用小的更改并保存它们,而无需花费额外的时间使用其他工具手动重新编译 java 代码,是否有这样的反编译器?有没有类似的东西(比如 .class 变量编辑器),甚至可以制作像 swf-decompiler 这样的 Java 反编译器吗?

4

1 回答 1

3

推荐一个工具是题外话,但至于是否可能的问题,答案是肯定的和否定的。

Java 对反编译器比较友好,所以对于简单的情况,应该可以创建这样的工具。然而,有一些特性或模式往往会绊倒当前的反编译器,并且考虑到语言的复杂性,不可能有一个能够可靠地往返任意 Java 的反编译器。

此外,虽然编译 Java 丢失的信息比 C 少得多,但它确实丢失了信息。显然,您会丢失诸如注释和空格之类的东西,但在默认设置下,您会丢失更多:局部变量名称、标志和类型、泛型类型、编译时注释等。这些信息大部分都保存在在某种程度上出于反射目的,将-g标志传递给编译器可以强制它保存更多信息,但您无法将其全部取回。

所以简而言之,你可以在大部分时间里做一个合理的工作,但你不可能一直完美地完成它。

另请注意,这是针对您自己编译的普通 Java。如果类文件最初不是用 Java 编写的,或者它们完全被混淆了,你可以忘记重新编译。即使反编译器产生可读的输出,输出也不太可能是可重新编译的。

如果你想修改任意jar,你需要的是反汇编器和汇编器。我所知道的最好的一个是Krakatau(披露:我写的)。这样做的好处是它适用于任何类文件,即使它们被混淆了。但是,它根本不是用户友好的。如果您不知道如何处理类文件格式和字节码,那么您将只能进行微不足道的更改(例如更改常量字符串)。

于 2014-07-12T02:30:40.400 回答