8

我正在使用来自商业供应商的大型 Java Web 应用程序。我从供应商那里收到了一个新的 .class 文件形式的补丁,它应该可以解决我们在使用该软件时遇到的问题。过去,应用来自该供应商的补丁会导致出现新的且完全不相关的问题,因此我想在将其应用到测试实例之前了解所做的更改。

我有两个并排的 .class 文件,一个是从当前运行的版本中提取的,一个是来自供应商的更新的。 JADJReversePro都反编译和反汇编(分别)这两个版本到相同的输出。但是,.class 文件的大小不同,我看到 .class 的输出存在差异od -x,因此它们绝对不相同。

我还可以采取哪些其他步骤来确定这两个文件之间的差异?


结论:

感谢您的好评。由于javap -c这两个类文件的输出也相同,因此我将得出结论认为 Davr 是正确的,并且供应商给了我一个安慰剂。虽然出于这个原因我接受了 Davr 的回答,但正是 Chris Marshall 和 John Meagher 让我开始使用 javap,所以感谢你们三个。

4

4 回答 4

7

有可能他们只是用新版本的java编译器编译,或者使用不同的优化设置等,所以功能相同,代码相同,但输出字节码略有不同。

于 2008-09-17T22:13:10.277 回答
6

如果您正在寻找 API 级别的差异,那么javap工具会很有帮助。它将输出方法签名,这些签名可以输出到纯文本文件并使用普通的差异工具进行比较。

于 2008-09-17T22:21:27.510 回答
1

您可以尝试在反编译的源代码上使用 diff 工具(例如 SourceGear 的免费 DiffMerge 工具)。这应该会发现文件差异,尽管它可能会发现“无关紧要”的差异,例如,如果变量在两个版本中的命名不同。

http://www.sourcegear.com/diffmerge/

于 2008-09-17T22:16:42.700 回答
1

您可以使用 javap(在 $JDK_HOME/bin 中)来反编译 java .class 文件。它会告诉你(例如)类文件版本等等

于 2008-09-17T22:20:13.300 回答