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

时间:2020-06-07 17:55:37

标签: java eclipse decompiling

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

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

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

1 个答案:

答案 0 :(得分:0)

为什么会这样?

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

反编译器的任务很困难。当编译器将Java源代码编译为字节码时,会丢弃很多信息。不仅仅是注释,缩进和局部变量名之类的显而易见的东西。这也是有关控制结构的特定选择。此外,在许多情况下,编译器必须插入综合方法或字段

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

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

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

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


必然的结果是,您不应在软件开发过程中使用反编译和重新编译。

最好的方法是掌握要尝试理解和修改的JAR的原始源代码。

如果没有其他选择,请仅使用反编译来帮助您理解其他人的代码。 (首先,很可能会违反许可证。请检查软件许可证是否禁止反向工程等。)

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