我可以使用 WinMerge 比较 *.class 文件吗?

我可以使用 WinMerge 比较 *.class 文件吗?

我曾经使用过它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:

  1. %APPDATA%\WinMerge\MergePlugins如果目录不存在,则创建目录。
  2. %APPDATA%\WinMerge\MergePlugins\Plugins.xml如果文件不存在,则 创建文件。
    • 用作C:\Program Files\WinMerge\MergePlugins\Plugins.xml删除<plugin>元素的模板。
  3. 插入一个自定义的<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. &#xD;&#xA;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>
  1. 重新加载插件(合并菜单命令)。
  2. 如果有必要,调整 Procyon JAR(参数)的路径合并插件设置。
  3. 使用新插件进行解包/比较合并

答案3

DecompileJVM 插件 DisassembleJVM已添加WinMerge 2.16.15 - 2021-09-20. 在插件列表中查找“反汇编 JVM 字节码”。

它是一个解包插件,允许您比较反汇编的 JVM 字节码javap

相关内容