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

问题描述 投票:0回答:1

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

为什么会出现这种情况?是不是无法反编译复杂的jars并在Eclipse中打开项目?

我得到的错误是,所使用的方法对某些类型不可用,方法access$0(...)对类型未定义... ...

java eclipse decompiling
1个回答
0
投票

为什么会发生这种情况?

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

反编译器的任务是很困难的。 当编译器将Java源代码编译成字节码时,很多信息都被丢弃了。 不仅仅是注释、缩进和局部变量名等显而易见的东西。 还有就是关于控制结构的特殊选择。 此外,在各种情况下,编译器不得不在其中插入 合成方法或领域.

反编译器要做两件有时是矛盾的事情。

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

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

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


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

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.