使用Delphi 6编译两次并在二进制文件上获得相同的校验和

时间:2009-12-01 22:55:50

标签: delphi compiler-construction linker checksum binary-reproducibility

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

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

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

然而,垃圾箱结果在十几个地方仍然有所不同,差异似乎仍然是某种时间戳(例如从A1 73改为C4 76)。

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

非常感谢任何帮助。

3 个答案:

答案 0 :(得分:1)

根据您在问题中的评论,我认为您正在搜索此问题的答案:

  

如何验证某个源文件集创建某个二进制文件

一种方法是使用自动构建的流程:

  1. 在源代码中插入一个唯一的verififcation标记(可能像GUID字符串一样简单或包含文件中的其他内容)
  2. 使用该验证标记
  3. 编译二进制文件
  4. 将生成的二进制和源代码打包在传递目录树
  5. 您必须确保您的源代码实际上使用了该验证标记(例如,通过在约框中显示或类似的东西)。

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

    - 的Jeroen

答案 1 :(得分:1)

几年前我们研究过这个问题,我记得答案很简单,Borland / Codegear / Embarcadero的人不赞同编译器在给出完全相同的输入时应该产生完全相同的输出的概念(鉴于目前的日期时间不被认为是输入)。

这是令人失望的,但考虑到德尔福是主要版本的旧版本,它可能不会改变。

答案 2 :(得分:0)

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

这不仅仅是时间戳,但有些地方会在结果中结束几个字节的随机垃圾内存。