【问题标题】:Compiling a single class file edited from existing jar with no dependencies编译从现有 jar 编辑的单个类文件,没有依赖项
【发布时间】:2017-03-15 08:20:24
【问题描述】:

我需要从 jar 中编辑单个类文件。

我已经成功从jar中提取了class文件,我反编译了一下,找到了我需要改的逻辑。

但是,我无法重新编译这个类文件,因为它导入了我没有并且不知道从哪里获取的库(netbeansiharder )。

所需的文件应该都在 jar 中,对吗?我可以将罐子用于此目的吗?

我不太了解 Java 的总体语法,所以任何与包或 jar 文件结构相关的东西都可能让我头疼……

【问题讨论】:

  • 需要的文件应该都在jar里面吧?错了
  • @RobbyCornelissen 你能解释一下吗? jar 中的类文件应该足以让依赖类解析。
  • 回答This SO question 可能会有所帮助。
  • @4castle 实际上,我已经看到了这个问题。我已经安装了 Eclipse,但我无法按照该页面上答案的说明进行操作。我得到的最接近的是尝试编译未编辑的 .class 文件,并立即出现包名称不正确的错误。一定是设置有问题...?

标签: java jar decompiler


【解决方案1】:

JVM 只需要能够在运行时找到依赖项。通常,它们将安装在标准位置(类路径),而不是与使用它们的 jar 捆绑在一起。但是,理论上您甚至可以在运行时执行诸如下载依赖项并通过类加载器加载它们之类的操作。

除此之外,反编译和重新编译通常不是一个好主意,因为反编译是一个有损且容易出错的过程。正如您所发现的,它通常只适用于简单的情况,并且有局限性。

如果您了解 Java 字节码,则可以通过使用 Krakatau 反汇编该类,编辑 .j 文件,然后重新组装来编辑该类。这允许您编辑任何类文件而无需编译,这意味着您不需要依赖项。无论类多么复杂,它也可以工作,甚至可以在混淆的类上工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-03
    • 1970-01-01
    • 2018-05-28
    相关资源
    最近更新 更多