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

Why does my decompiled jar get so many errors?

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

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

我收到错误消息,指出所使用的方法对某些类型不可用,方法 access$0(...) 未定义类型 ...

Why is this happening?

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

反编译器的任务很艰巨。当编译器将Java源代码编译成字节码时,很多信息都被丢弃了。它不仅仅是像注释、缩进和局部变量名这样显而易见的东西。这也是对控制结构做出的特定选择。此外,在各种情况下,编译器必须插入合成方法或字段

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

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

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

混淆器使它变得更加困难。故意的。


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

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

只有在没有办法的情况下,才使用反编译来帮助你理解别人的代码。 (首先,这很可能是违反许可证。检查软件许可证是否禁止逆向工程等。)

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