【问题标题】:Is it possible to rename a Java class with a string of different length?是否可以用不同长度的字符串重命名 Java 类?
【发布时间】:2011-09-20 20:39:57
【问题描述】:

我可以使用任何长度与前一个类名相同的字符串重命名已编译的 java 类,但是当长度不同时,.class 文件将停止工作并显示如下错误:

unknown constant tag X

其中 X 是我每次尝试运行小程序时都会更改的数字。

有没有一种方法可以在不使用外部程序的情况下使用与以前名称不同长度的字符串重命名已编译的 java 类?只是编辑 .class 文本内容。

【问题讨论】:

  • 你到底为什么要这么做?
  • 那么你到底为什么不想使用外部程序呢?一些混淆器/重新打包器工具应该能够做到这一点。
  • @Thilo:因为它是一个在线工具,我想“即时”完成。
  • 您可以“即时”调用外部工具。这些工具可能都是用 Java 编写的,因此您甚至可以在进程中调用它们。

标签: java class rename


【解决方案1】:

如果有什么东西可以做你想做的事,而且除了你之外没有人明白你为什么要这样做,ASM 库将是让你做到这一点的工具。

【讨论】:

    【解决方案2】:

    我会直接说出来 - 手动编辑 .class 文件可能不是最好的主意。我的意思是,重新编译你的程序并不是那么难。另外,如果您只是在原始源代码中重命名类,那么您的源代码实际上将匹配类文件(为什么不呢?)。如果你没有源代码,我相信你会找到一个不错的反编译器(只需谷歌它 - 似乎有一些好的)。这样可以更轻松地重命名类。

    但是,如果您真的,真的想要直接操作已编译的代码,您可能需要查看ASM 项目。我相信它可以让你做你想做的事(虽然这对我来说似乎有点复杂,而且它需要创建一个外部 java 程序,就像你不想要的那样)。

    如果您仍然一心想手动更改 .class 文件,那么我可以推荐您到 The JAVA Virtual Machine Specification(特别是第 4 章),在那里您可以获得 .class 文件的所有美味细节。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-28
      • 2014-05-08
      • 2011-11-24
      • 2023-02-03
      • 2021-02-09
      • 2012-09-14
      相关资源
      最近更新 更多