【问题标题】:Decompile & recompile single file from jar从 jar 反编译和重新编译单个文件
【发布时间】:2012-03-23 21:53:15
【问题描述】:

这个问题已经在 cmets 的帮助下解决了:

必须使用正确的目标版本重新编译 java。在我的情况下,javac -source 1.3 -target 1.3 而不是简单的javac 成功了。

问题描述:

我有一个已编译的 .jar java 程序,其中需要修改单个 url 字符串。使用 JD 我能够反编译代码并进行更改。

由于我想避免重新编译整个项目,我想我可以简单地将我修改的单个 .java 文件重新编译成 .class 并用它替换原始文件。

但是,在重新打包 jar 之后,程序确实启动了,但使用我修改的代码的功能表现不正常。

在日志中我发现:

E EventDispatchThreadExceptionHandler:Unhandled exception occurred during event dispatching.::
java.util.MissingResourceException: Can't find bundle for base name com.myCompany.mySoftware.resources.ModuleResources, locale en_US
       at java.util.ResourceBundle.throwMissingResourceException(ResourceBundle.java:842)

ModuleResources.java 是我修改的文件...

问题分析:

  1. 重新打包没有错:如果我提取并重新打包原始 jar,一切正常。
  2. 我的修改似乎也不是问题:当我重新编译 JD 反编译的 java 文件并使用生成的类文件进行重新打包时,我遇到了同样的失败。

我反编译了重新打包的 jar 文件,并将其与原始 jar 文件的反编译进行了比较:在我修改的文件中(至少)代码似乎相同但 JD 显示不同的行号。这能暗示问题吗?

任何帮助将不胜感激。

非常感谢!

【问题讨论】:

  • “程序没有运行”非常模糊 - 请提供更多信息。
  • JAR 中的类是针对什么版本的 Java 编译的?您使用什么版本的 Java 重新编译该类?您收到的错误消息是什么?
  • 一般情况下应该这样工作。正如 John 所说,我们需要有关该问题的更多信息 - 您是否看到异常情况?
  • 好的,我发现问题描述太模糊了。请参阅修改后的问题。我不确定这些类是针对哪个版本的 java 编译的。我怎样才能知道?
  • 从我看到的设备上安装的 java 版本是 cvm 1.3。我用当前的 JDK (Java SE 7) 重新编译了 .java 文件。这可能是问题吗?

标签: java decompiling


【解决方案1】:

当我重新编译 JD 反编译的 java 文件并使用生成的类文件进行重新打包时,我得到同样的失败

这似乎把矛头指向了京东。重新编译 JD 反编译的 java 文件时,能否将结果与原始的.class 文件进行比较(例如,将两者都反汇编并比较结果)?如果它们在实质上有所不同,那将证明京东有过错的理论;如果他们不这样做,那么问题就出在其他地方。

【讨论】:

  • 正如我在问题中所说,两者的反汇编代码实质上是相同的,除了JD显示的行号。
  • @ArikRaffaelFunke:您的问题甚至没有提到“反汇编”这个词。你说的是反编译,我说的是反汇编。后者在检测字节码差异方面要精确得多。
  • 抱歉造成误会。我读了“反汇编”,但理解了“反编译”。我的问题已经解决了,但为了以后参考,如何“反汇编”字节码?
  • @ArikRaffaelFunke: javap -c
  • 我在这里使用这个java.decompiler.free.fr - 它似乎可以正确反编译。问题是再次编译它
【解决方案2】:

这是老问题了。

现在,我找到了反编译和重新打包jar文件的好方法。

这是好文档。

https://www.talksinfo.com/how-to-edit-class-file-from-a-jar/

我推荐文档中的第三种方法。!!!

【讨论】:

    猜你喜欢
    • 2020-08-22
    • 1970-01-01
    • 2014-12-05
    • 1970-01-01
    • 2021-02-20
    • 2015-02-06
    • 2016-12-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多