我正在处理的遗留项目包括一些二进制 jar 文件形式的外部库。我们决定,为了分析和潜在的修补,我们希望接收这个库的源代码,使用它们来构建新的二进制文件,并在经过足够长的详细回归测试后切换到这些二进制文件。
假设我们已经检索并构建了源(我实际上处于计划阶段)。在实际测试之前,我想执行一些“兼容性检查”以排除源代表与“旧”二进制文件中的内容截然不同的可能性。
使用该javap
工具,我能够提取用于编译的 JDK 版本(至少我相信它是 JDK 的版本)。它说,二进制文件是使用主要版本 46 和次要版本 0 构建的。根据这篇文章,它映射到 JDK 1.2。
假设将使用相同的 JDK 进行源代码编译。
问题是:如果这两个二进制文件都是从相同的来源构建的,是否有一种可靠且可能有效的验证方法?我想知道所有方法签名和类定义是否相同,以及大多数或所有方法实现是否相同/相似。
该库非常大,所以我认为对反编译的二进制文件进行详细分析可能不是一种选择。