Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于快速修改的Java反编译器和编辑器_Java_Decompiler_Code Editor_Swf Decompiler - Fatal编程技术网

用于快速修改的Java反编译器和编辑器

用于快速修改的Java反编译器和编辑器,java,decompiler,code-editor,swf-decompiler,Java,Decompiler,Code Editor,Swf Decompiler,我试图找到一个Java反编译器,就像swf反编译器一样,它允许编辑和重新编译源代码,而无需将其导出到任何地方,并执行任何外部操作。我想要的是非常快速地将小的更改应用到.jar并保存它们,而不需要花费额外的时间用其他工具手动重新编译java代码,有这样的反编译器吗?有没有类似的东西(比如.class变量编辑器)和像swf反编译器这样的Java反编译器有可能吗?推荐一个工具是无关紧要的,但对于是否可能的问题,答案是肯定和否定的 Java是相对反编译器友好的,所以对于简单的情况,应该可以创建这样的工具

我试图找到一个Java反编译器,就像swf反编译器一样,它允许编辑和重新编译源代码,而无需将其导出到任何地方,并执行任何外部操作。我想要的是非常快速地将小的更改应用到.jar并保存它们,而不需要花费额外的时间用其他工具手动重新编译java代码,有这样的反编译器吗?有没有类似的东西(比如.class变量编辑器)和像swf反编译器这样的Java反编译器有可能吗?

推荐一个工具是无关紧要的,但对于是否可能的问题,答案是肯定和否定的

Java是相对反编译器友好的,所以对于简单的情况,应该可以创建这样的工具。然而,有一些特性或模式往往会使当前的反编译器出错,并且考虑到语言的复杂性,不太可能有一个反编译器能够可靠地往返于任意Java

此外,虽然编译Java比C丢失的信息少很多,但它确实丢失了信息。显然,您将丢失注释和空格等内容,但在默认设置下,您将丢失更多内容:局部变量名、标志和类型、泛型类型、编译时注释等。大部分信息在某种程度上是为了反射而保留的,将
-g
标志传递给编译器可以强制它保存更多信息,但您无法将其全部恢复

简言之,你大部分时间都可以做一件合理的工作,但你不可能一直都做到完美

还请注意,这是针对您自己编译的普通Java。如果类文件最初不是用Java编写的,或者它们完全是模糊的,那么您可以忘记重新编译。即使反编译器产生可读的输出,输出也不可能是可重新编译的


如果您想修改任意JAR,您需要的是一个反汇编程序和汇编程序。我所知道的最好的一个是(披露:我写的)。这样做的好处是,它适用于任何类文件,即使它们是模糊的。但是,它一点也不友好。如果您不知道如何处理类文件格式和字节码,您将无法进行更多的琐碎更改(例如更改常量字符串)

你做过什么调查吗。。。对于stackoverflow来说,建议使用工具的问题是离题的。在启用调试的JVM中只对原始源代码进行热部署更改有什么错?您是否在问是否有可能存在一个工具来从jar中提取源文件、编辑源代码并重建jar?这似乎很有可能,只要你拥有所有的构建依赖项;这不仅仅是推荐OT,发现也是如此。这只是字节操作。从表面上看,“有大量的.jar要审查和编辑”似乎真的,真的很奇怪。也许你可以更具体地说明你想做什么。@Victor2748如果你足够聪明,可以破解Java游戏,那么你应该足够聪明,可以从现有的组件(都在那里)中开发出这样的工具.据我所知,可以用Java字节码来表达无法用Java语言轻松表达的功能。有关这方面的一些见解,请参阅。@Thorbjørnravandersen我很清楚这一点。另外,如果Krakatau能够生成具有正确行号的半可读源(来自类中的调试信息)如果你制作一个Eclipse插件来替换默认的类表示,那么你就是赢家了。@Thorbjørnravandersen Krakatau反编译器是为逆向工程设计的,因此它完全忽略调试信息(因为它通常不会出现)。由于我上面提到的原因,源代码通常不可重新编译。无论如何,我在这里谈论的是汇编程序和反汇编程序,而不是反编译器。