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

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

回答了!Bindiff 正是我一直在寻找的。非常感谢。

有帮助吗?

解决方案

你吃过看看 Bindiff

其他提示

我之前就遇到了这个问题。我的解决办法是写一个工具,它集所有时间戳在.EXE / .DLL为已知值。我会运行它作为构建后步骤。然后二进制的diff会工作得很好。

您也许可以拆卸的二进制文件,然后做一个diff上装配...

这听起来像你的QA团队虽然采取了错误的方法......这不应该的问题,以他们什么代码如下;只是它做什么它应该做的。

编辑: 哦!再次看完后,我意识到,我误解你的问题。我认为他们想测试改变了方法...

在这种情况下,为什么不MD5哈希值,并比较这些?最微小的变化将导致产生一个完全不同的哈希值。

不知道什么二进制文件的种类(只DLL文件?PE / WinCE的应用程序?其他?)是否有可能嵌入到二进制文件,例如版本信息使用在提交源代码更新的版本源代码管理标签。创建新的构建然后当,二进制将有它的更新和版本字符串。而不必diff的二进制文件,你可以使用的版本字符串,并检查更改。

NDepend的

查找

在我工作的“土生土长”在我的公司工具,安装验证,我们使用的 超越比较 作为用于比较的后端。

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

项目依赖图生成器C++ 项目的依赖关系绘图器 两者都使用 图形可视化 可视化依赖关系。我想您可以使用它们中的任何一个作为您需求的基础,并在依赖关系图中特别突出显示源文件或其他叶子已更改的分支。

MD5 哈希值或校验和(如上所述)、忽略空格并过滤掉注释更改的简单差异或版本控制系统中的 changlist 信息都可以表明哪些文件已更改。

gnu binutils 具体来说 字符串

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top