3

我们的 QA 团队希望根据构建之间的 EXE 和 DLL 实际更改来集中他们的测试。我们有一个不错的 svn 更改报告,但是源代码和更改后的二进制文件之间的关系并不总是很明显。我们比较的构建总是完全干净的构建,所以我们不能使用文件系统时间戳。我正在寻找用于比较 Windows(和 Windows CE)PE 二进制文件的工具,这些二进制文件将忽略嵌入的时间戳和其他杂乱无章的东西。对于生成可靠的“哪些二进制文件真正改变了”报告的工具或其他方法有什么建议吗?谢谢。

澄清:感谢到目前为止的答案,但我们无法通过直接的逐字节比较或比较校验和来生成报告,因为每次构建时所有文件看起来都不同,即使源没有改变,因为编译器插入的时间戳。问题是如何忽略误报。我认为拆解和比较的想法最接近我们的需要......

回答!Bindiff 正是我想要的。非常感谢。

4

8 回答 8

4

你看过Bindiff吗?

于 2008-12-06T13:56:39.017 回答
2

我之前遇到过这个问题。我的解决方案是编写一个工具,将 .EXE/.DLL 中的所有时间戳设置为已知值。我会将它作为构建后的步骤运行。然后二进制差异就可以了。

于 2008-12-06T13:30:39.883 回答
1

您也许可以反汇编二进制文件,然后对程序集进行比较...

这听起来像是您的 QA 团队采用了错误的方法......对他们来说代码是什么样的并不重要;只是它做了它应该做的事情。

编辑:哦!再次阅读后,我意识到我误解了您的问题。我以为他们想测试已经改变的方法......

在这种情况下,为什么不获取 MD5 哈希值并进行比较呢?最微小的变化将导致生成完全不同的哈希。

于 2008-12-06T03:11:02.160 回答
1

不确定哪种二进制文件(DLL?仅限 PE/WinCE 可执行文件?其他?)是否可以在二进制文件中嵌入版本信息,例如使用源代码控制标签在提交时更新源代码中的版本。然后,当创建新版本时,二进制文件也会更新它的版本字符串。不必比较二进制文件,您可以使用版本字符串并检查更改。

于 2008-12-06T08:23:13.963 回答
1

看看NDepend

于 2008-12-06T13:51:52.413 回答
0

当我在公司开发用于安装验证的“本土”工具时,我们使用Beyond Compare作为后端进行比较。

它具有出色的文件/文件夹比较(以及二进制)和脚本功能,并且可以输出 XML 报告。

于 2008-12-06T03:26:30.053 回答
0

项目依赖图生成器C++ 项目的 Dependency-Grapher都使用GraphViz来可视化依赖关系。我想你可以使用它们中的任何一个作为你需要的基础,特别突出依赖图中源文件或其他叶子发生变化的分支。

MD5 哈希或校验和(如上所述),一个简单的 diff 忽略空格并过滤掉注释更改,或者来自版本控制系统的 changlist 信息可以指示哪些文件已更改。

于 2008-12-06T08:21:53.687 回答
0

gnu binutils特别是字符串

于 2008-12-06T08:25:01.747 回答