用于对比Windows二进制文件的工具?

3
我们的QA团队希望根据实际变化的EXE和DLL文件来集中测试重点。我们有一个很好的svn变更报告,但源代码与已更改的二进制文件之间的关系并不总是明显的。我们比较的构建版本始终是全新的构建,因此无法使用文件系统时间戳。我正在寻找比较Windows(和Windows CE)PE二进制文件的工具,可以忽略嵌入式时间戳和其他冗杂数据。是否有任何工具或其他可靠生成“哪些二进制文件真正发生了变化”报告的方法?谢谢。
澄清:感谢到目前为止给出的答案,但我们不能通过直接进行逐字节比较或比较校验和来生成报告,因为每次构建时所有文件似乎都不同,即使源代码没有更改,也是因为编译器插入的时间戳。问题在于如何忽略虚警。我认为反汇编和比较的思路最接近我们需要的......
已回答!Bindiff正是我需要的。非常感谢。

有趣的技术问题,但是为什么“EXE/DLL更改”列表比“源文件更改”列表更相关呢? - orip
这是一个场景: SVN 说 ObscureLib.c 在上次构建后被修改。我应该重新运行 foo.exe 的测试套件吗? - Pete Richardson
8个回答

4

不幸的是,这似乎对在Visual Studio中构建的托管文件无效。即使我在VS2010中编译了一个dll,将该文件重命名为.old.dll,然后再次编译(不更改版本信息!),然后执行“bindiff.exe /v file.dll file.old.dll”,它仍然会显示文件不同。进行十六进制比较确认了这一点。不知道原因是什么? - Kobus Smit

2

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


1

你可以尝试反汇编二进制文件,然后对汇编代码进行比较...

不过这听起来像是你的QA团队采取了错误的方法... 他们不应该关心代码的外观,只需要确保它能够按照预期工作。

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

如果是这样,为什么不获取MD5哈希值并进行比较呢?即使是微小的更改也会导致生成完全不同的哈希值。


好的,但我认为QA团队只想花时间测试已更改的二进制文件,因此需要一个差异工具。 - nickf

1

不确定是什么类型的二进制文件(DLL?只有PE / WinCE可执行文件?其他?)是否可以在二进制文件中嵌入版本信息,例如使用源代码控制标记,在提交时更新源代码中的版本。然后在创建新版本时,二进制文件的版本字符串也会被更新。您可以使用版本字符串而不是对比二进制文件,并检查其是否有变化。


我们考虑了版本号。自动更新版本号仍需要将源代码更改映射到二进制文件(这很困难)。手动更新版本号太容易出错。(即我不相信开发人员可以可靠地完成它。:-)) - Pete Richardson

1

0
当我在公司为安装验证工具进行“自制”时,我们使用Beyond Compare作为比较的后端。
它拥有出色的文件/文件夹比较(包括二进制文件),并具备脚本编写能力,可以输出XML报告。

0

项目依赖图生成器C++项目依赖图生成器都使用GraphViz来可视化依赖关系。我想你可以将它们作为你的需求基础,并特别突出显示依赖图中源文件或其他叶子节点发生变化的分支。

MD5哈希或校验和(如上所建议),忽略空格并过滤掉注释更改的简单差异,或从您的版本控制系统中获取的更改列表信息可以标识哪些文件已更改。


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接