5

出于二进制/源代码验证的目的,我希望能够相隔两周在同一台计算机上进行两次编译,并使二进制文件相同,从而通过一些校验和测试。

到目前为止,我发现编译器很可能会将时间戳写入二进制文件中。我可以通过比较这个 msdn 文章中的 dumpbin /rawdata 结果来解决这个问题。

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

然而,dumpbin 结果在十几个地方仍然存在差异,并且差异似乎仍然是某种时间戳(例如从 A1 73 变为 C4 76)。

我假设这是 delphi 编译器放入代码/数据部分的时间戳,但我找不到发生这种情况的位置或如何将其关闭。摆弄各种编译器/链接器选项并没有改变这种行为。

任何帮助将不胜感激。

4

3 回答 3

1

根据您在问题中的评论,我认为您正在寻找这个问题的答案:

如何验证某个二进制文件是由一组特定的源文件创建的

一种方法是建立一个自动化的构建过程:

  1. 在源代码中插入唯一的验证标记(可能像 GUID 字符串或包含文件中的其他内容一样简单)
  2. 使用该验证标签编译二进制文件
  3. 将生成的二进制文件和源代码打包到交付目录树中

您必须确保您的源代码确实使用了该验证标签(例如通过显示在关于框或类似的东西中)。

我使用FinalBuilder来自动化这样的构建过程。

——杰伦

于 2009-12-02T11:06:18.483 回答
1

几年前我们研究过这个问题,我记得答案很简单,Borland/Codegear/Embarcadero 的人不同意编译器应该在完全相同的输入下产生完全相同的输出的概念(假设当前日期时间不能被视为输入)。

这是令人失望的,但考虑到 Delphi 的主要版本已经超过 10 个,它可能不会改变。

于 2009-12-03T02:35:56.737 回答
0

不幸的是,我还没有听说过这个问题的任何答案。

不仅仅是时间戳,在某些地方,内存中的几个字节的随机垃圾最终会出现在结果中。

于 2009-12-01T23:33:47.780 回答