用于区分Windows二进制文件的工具?

时间:2008-12-06 02:57:42

标签: windows diff compare build binaries

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

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

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

8 个答案:

答案 0 :(得分:4)

你看过Bindiff吗?

答案 1 :(得分:2)

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

答案 2 :(得分:1)

你也许可以反汇编二进制文件,然后在程序集上做差异...

这听起来像你的QA团队采取了错误的方法......对他们而言,代码看起来并不重要;只是它做了它应该做的事情。

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

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

答案 3 :(得分:1)

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

,而不必区分二进制文件

答案 4 :(得分:1)

请看NDepend

答案 5 :(得分:0)

当我在我公司使用“自家种植”工具进行安装验证时,我们使用 Beyond Compare 作为后端进行比较。

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

答案 6 :(得分:0)

Project dependency graph generatorDependency-Grapher for C++-Projects都使用GraphViz来显示依赖关系。我想你可以使用它们中的任何一个作为你需要的基础,特别突出显示源文件或其他叶子已经改变的依赖图中的分支。

MD5哈希或校验和(如上所述),简单的区分空格并过滤注释更改,或者版本控制系统中的变通信息可以指示哪些文件已更改。

答案 7 :(得分:0)