为什么我的反编译 jar 会出现这么多错误?



我已经使用 JD-GUI 反编译了一个 jar(这是一个用旧 Java 版本编写的非常复杂的应用程序(,并将 java 文件与所有必需的外部库(jar(一起放入 Eclipse 中。问题是我收到很多关于方法不适用于特定类型的错误,有关access$0的错误以及许多其他问题。

为什么会这样?在 Eclipse 中反编译复杂的 jar 并打开项目是不可能的吗?

我收到错误,指出所使用的方法不适用于某些类型,该方法访问$0(...(未定义该类型...

为什么会这样?

发生这种情况是因为反编译器无法找出将编译为等效字节码的 Java 源代码。

反编译器的任务很困难。 当编译器将Java源代码编译为字节码时,会丢弃大量信息。 它不仅仅是注释、缩进和局部变量名称等明显的东西。 这也是对控制结构做出的特定选择。 此外,在各种情况下,编译器必须插入合成方法或字段

反编译器必须做两件有时相互矛盾的事情:

  • 它必须生成可读的代码。
  • 它必须生成(希望(可编译的代码,并且(希望(与字节码的含义相同。

不幸的是,反编译器并不总是正确的。 实际反编译是启发式的,启发

式的并不完美。混淆器使它更加困难。 故意。


由此推论,您不应该在软件开发过程中使用反编译和重新编译。

最好的方法是获取您尝试理解和修改的 JAR 的原始源代码。

仅当您别无选择时,才使用反编译来帮助您理解其他人的代码。 (首先,这很可能是违反许可证的行为。 检查软件许可证是否禁止逆向工程等。

如果您确实需要修改字节码,请使用字节码反汇编器...并学习阅读和编辑 Java 汇编语言。

相关内容

最新更新