我们在 SVN 中有普通的 java 文件。我们对这些文件进行了一些更改,但碰巧这些文件丢失了(它们不在 SVN 中)。但是我们有使用新更改的文件生成的类文件。
我们可以使用类文件,反编译它们并将其与 SVN 进行比较。最简单的方法是什么?
大约有 400 个更改的文件。所以一一比较是行不通的。
我正在寻找任何工具或脚本。
还有没有反编译器,可以一次性反编译整个文件夹?
谢谢
我们在 SVN 中有普通的 java 文件。我们对这些文件进行了一些更改,但碰巧这些文件丢失了(它们不在 SVN 中)。但是我们有使用新更改的文件生成的类文件。
我们可以使用类文件,反编译它们并将其与 SVN 进行比较。最简单的方法是什么?
大约有 400 个更改的文件。所以一一比较是行不通的。
我正在寻找任何工具或脚本。
还有没有反编译器,可以一次性反编译整个文件夹?
谢谢
对于反编译使用JAD,最常用的工具。虽然比较有点棘手。我建议以下场景:
为什么要编译和反编译原始源代码?因为 JAD 产生了非常好的结果,但它永远不会生成与使用的完全相同的源。因此,如果您想在比较原始源和反编译源时避免头疼(并快速查明实际差异),您必须比较两个 JAD 输出,而不是原始源和合成 JAD 输出。
我希望有两个目录结构来比较对你来说不是问题。您可以在 Windows 上使用Total Commander或在 Linux 上使用各种实用程序/脚本,例如:
$ diff -r dir1 dir2
如果您在生成类文件时没有使用混淆,则可以将反编译的源文件与原始文件进行比较。但是,自动比较将很困难,因为例如由于编译器优化,反编译的源代码通常与原始源代码略有不同。我个人使用jad作为反编译器,但我不确定您是否可以一次性为其提供整个文件夹。
我使用以下命令(jad 反编译器)一次性编译文件夹中的所有类文件。
jad -o -r -sjava -dsrc tree/**/*.class
使用 jd-gui,非常好的反编译器,但是编译......它会很痛苦。
现在我正在这样做,使用http://java.decompiler.free.fr/进行反编译和比较(http://www.scootersoftware.com/)来比较包和文件。与编译和反编译的实际版本 (svn) 进行快速比较,以检查哪些文件(以及哪些部分)是最新的,这看起来是个好主意。