使用Delphi 6编译两次,生成的二进制文件校验和相同。

6
为了进行二进制/源代码验证,我希望能够在同一台计算机上分别进行两次编译,间隔2周,并使二进制文件完全相同,从而通过某些校验和测试。
到目前为止,我发现编译器很可能会将时间戳写入二进制文件中。我可以通过按照此MSDN文章的方式对dumpbin / rawdata结果进行比较来解决这个问题。

http://support.microsoft.com/kb/164151

然而,dumpbin结果仍然在大约十几个地方有所不同,差异似乎仍然是某种时间戳(例如从A1 73到C4 76)。
我认为这是Delphi编译器放入代码/数据部分的时间戳,但我找不到它发生的位置或如何关闭它。调整各种编译器/链接器选项并未改变此行为。
任何帮助都将不胜感激。

我只是好奇(无意冒犯):您想验证两个构建之间exe校验和未更改的场景是什么? - Dan Cristoloveanu
我会得到每个“.obj”(或Delphi中的等效物)都有一个时间戳,这个时间戳会进入你的.exe文件。 - jmucchiello
与一个代码转移有关,对手方需要测试二进制文件,随后验证代码是否相应匹配。到目前为止,我还没有想到其他的方案来解决这个问题。 - Mike Davis
3个回答

1
我们在几年前研究过这个问题,据我回想,答案很简单:Borland/Codegear/Embarcadero的人并不认同编译器应该产生完全相同的输出,即使输入完全相同(考虑到当前日期时间不可接受作为输入)。这令人失望,但鉴于Delphi已经有无数个主要版本,它可能不会改变。

1
根据您在问题中的评论,我认为您正在寻找这个问题的答案:
“如何验证某个二进制文件是由某个源代码集创建的”
一种方法是拥有一个自动化构建过程,该过程包括以下步骤:
1. 在源代码中插入唯一的验证标记(可能只是一个GUID字符串或其他包含文件中的内容) 2. 使用该验证标记编译二进制文件 3. 将生成的二进制文件和源代码打包到交付目录树中
您必须确保您的源代码实际上使用了该验证标记(例如通过在关于框中显示或类似方式)。
我使用FinalBuilder来自动化此类构建过程。
--jeroen

0

很遗憾,我还没有听说过任何解决这个问题的答案。

不仅仅是时间戳的问题,有些地方几个字节的随机垃圾数据也会出现在结果中。


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