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

标签 java eclipse decompiling

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

为什么会发生这种情况?是否无法反编译复杂的jar并在Eclipse中打开项目?

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

最佳答案

Why is this happening?

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

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

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

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

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

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

<小时/>

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

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

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

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

关于java - 为什么我的反编译 jar 出现这么多错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62249474/

相关文章:

java - Weblogic EJB 调用在中等负载下开始失败并出现OptionalDataException

java - 仅在 Eclipse 中在打开的项目上运行 Maven 安装

c++ - gcc - 如何检测基于指针的内存访问

java - 在没有源代码的已编译 1.6 Java 类中更改整数字段的最佳方法

java - 如何在 Eclipse 中启用索引下载以进行 Maven 依赖项搜索?

c - 循环优化差异

java - 从 Java 客户端向我的 Whatsapp 发送消息

java - 禁用 JTree 中的标准鼠标行为

java - 在 Java 接口(interface)中,我如何*不*使用从父接口(interface)继承的特定方法?

eclipse - 使用 Tomcat,但得到 ClassNotFoundException : org. jboss.logging.BasicLogger