如何更改已编译 jar 中的 double?

How do I change a double in a compiled jar?

我有一个 jar,其中包含一行代码,用于比较两个双精度值,一个值为 0.7,但我需要能够将其更改为 0.0

我不能使用反射或类似的东西,因为这是一个编译的 jar 文件(不是开源的),但改变这个值是至关重要的,因为如果它保持在 0.7 有一个巨大的滞后问题。

我正在考虑编辑字节码,但找不到任何好的软件来这样做。

感谢您对此提供的任何帮助。

如果可以反编译 class,则可以进行更改并重新编译。然后用你的补丁 class 卷起 jarfile。这取决于用于编译它的 class 和 JDK 这将有多容易。

参考文献:JAD (Wiki link because JAD is basically a dead project, though it continues to work when I need it to.) If you use Eclipse, you might have luck with JD-Eclipse. There is also the Procyon 项目,我在其中取得的成功有限。

看看如何反编译程序Javaclasses,然后自己重​​新编译软件。

How do I "decompile" Java class files?

来自另一个类似的问题:(Change string constant in a compiled class)

如果你有这个 class 的来源,那么我的方法是:

  • 获取 JAR 文件
  • 获取单曲的来源class
  • 使用 class 路径上的 JAR 编译源代码(这样,您不必编译任何其他内容;JAR 已经包含二进制文件也无妨)。您可以为此使用最新的 Java 版本;只需使用 -source-target.
  • 降级编译器
  • 使用 jar u 或 Ant 任务将 JAR 中的 class 文件替换为新文件

除了使用(十六进制)编辑器或反编译器之外,还可以使用像 asm. You actually might even be able to use an pre-load agent to transform the code 这样的字节码操作库。