我曾经使用过它BeyondCompare
,它能够*.class
通过配置它在比较之前运行反编译器来比较文件。
有没有类似的东西WinMerge
?或者有可以代替的插件?
答案1
我花了一天时间为 Winmerge 编写了一个 DLL 插件来实现这一点 - 它不是世界上最伟大的东西,但它完成了工作。
获取文件名,将其拆分为目录和类名,然后为每个类文件调用 javap。不幸的是,它相当慢(我想这是 javap 的错)。
如果 winmerge 在解压文件之前比较一下文件是否有差异就好了 - 这样可以节省一点时间。也许这可以通过插件来实现,但正如我所说,我只是尽可能快地将它们拼凑起来。
源代码、预建的 DLL 和说明在这里: https://gitlab.com/wayneuroda/winmerge-unpack-java-class-files
答案2
如果比较反汇编的 JVM 字节码(参见我的其他答案)还不够的话,也许反编译为 Java 源代码可能会更有帮助……
在了解了“目前尚未记录的” Plugins.xml
(改进的插件系统中的插件sct
)作为和插件的替代品dll
,我成功地“创建”了一个*.class
使用反编译Java文件的插件procyon Java 反编译器在合并2.16.30.0:
%APPDATA%\WinMerge\MergePlugins
如果目录不存在,则创建目录。%APPDATA%\WinMerge\MergePlugins\Plugins.xml
如果文件不存在,则 创建文件。- 用作
C:\Program Files\WinMerge\MergePlugins\Plugins.xml
删除<plugin>
元素的模板。
- 用作
- 插入一个自定义的
<plugin>
路径\to\procyon-decompiler.jar:
<?xml version="1.0"?>
<plugins>
<plugin name="MyDecompileJavaClass">
<event value="FILE_PACK_UNPACK" />
<description value="My JVM class decompiler with Procyon. 
Arguments: Command line options passed to the java command." />
<file-filters value="\.class$" />
<is-automatic value="false" />
<unpacked-file-extension value=".class.java" />
<extended-properties value="ProcessType=Decompilation;MenuCaption=My Decompile Java Class" />
<arguments value="A:\path\to\procyon-decompiler.jar" />
<unpack-file>
<command>cmd /c java -jar ${*} "${SRC_FILE}" > "${DST_FILE}"</command>
</unpack-file>
</plugin>
</plugins>
- 重新加载插件(合并菜单命令)。
- 如果有必要,调整 Procyon JAR(参数)的路径合并插件设置。
- 使用新插件进行解包/比较合并。
答案3
这DecompileJVM 插件 DisassembleJVM
已添加WinMerge 2.16.15 - 2021-09-20. 在插件列表中查找“反汇编 JVM 字节码”。
它是一个解包插件,允许您比较反汇编的 JVM 字节码javap
。