Easy Java .class文件编辑器?

时间:2012-06-18 00:49:31

标签: java class compiler-construction

我有一个充满错误的Java类,甚至不能在我的计算机上编译(我不知道这个人是如何编译它的)但不知何故它有效。我不能用我常用的工具重新编译它,所以我正在寻找可以编译它但可能忽略错误的东西,或者我认为很酷的东西可以在反编译的程序中打开它显示文件的源代码,允许我编辑它,然后自动重新编译它。有点像JD-GUI,但你可以编辑文件。

2 个答案:

答案 0 :(得分:5)

我认为Java不存在这样的工具。或者至少,不是以有效解决问题的形式。

更有效的方法是找出导致这些编译错误的原因并进行修复。如果您在编译的文件中收到大量错误(例如因为它为其他人编译),则可能是以下之一:

  • 您的构建类路径不正确,因此编译器无法找到外部依赖项。
  • 您缺少一些包含外部依赖项的JAR文件。
  • 您的某些JAR文件版本错误。
  • 您使用的是错误版本的Java SDK。

一旦你知道问题是什么,这些都很容易解决。

如果您向我们提供了编译错误的示例,我们可以确认这一点......或提供更好的诊断。


当前一代反编译器不太擅长生成可编译源代码。此外,这种方法不会解决我上面列出的任何问题。 (即使它确实如此,你也会通过黑客攻击反编译的源代码来深入挖掘自己。)

答案 1 :(得分:0)

虽然Java字节码比直接编译成可执行代码的语言更容易反编译,但Java反编译器却非常无效,特别是涉及更复杂的代码时,如果原始源代码使用泛型,则更是如此。如果它完全编译,结果源代码通常与原始代码完全无关......

  1. 如果您有该类的人为生成的版本的源代码,我建议您尝试修复它,而不是尝试对.class文件进行反向工程。

  2. 如果你有一个.class文件,你仍然可以在子类中扩展或覆盖它的一些方法,基本上可以修改它的行为。使用这样的继承并不总是可行,但它通常有助于第三方黑盒代码......

  3. 您可能需要查看Javassist。它是一个字节码操作库,除了其他功能之外,它还允许您在现有方法中插入Java语句。它确实有很多限制,但在某些情况下它可能非常有用......