为什么每个构建都会更改exe文件?

时间:2008-11-27 11:57:23

标签: delphi linker binary-reproducibility

构建相同的项目(没有任何更改)会生成二进制不同的 exe文件:它们的一些小区域是不同的。空项目,版本信息(以及每个构建的自动增量)都将关闭。

为什么会这样?是否有可能让delphi为同一个项目生成二进制相等的文件?

4 个答案:

答案 0 :(得分:15)

Windows使用的PE可执行文件格式中的各种结构包括由编译器和链接器设置的时间戳。

可以对文件进行后期处理,将这些值重置为定义的常量(我编写了一个工具来为需要精确哈希值的安全产品执行此操作),但这只能在准备好的时候完成-ship可执行文件,因为一些调试器依赖于源查找的时间戳等等。

答案 1 :(得分:2)

尝试将问题更改为“如果源没有更改,我如何避免编译”,可能更容易处理。

答案 2 :(得分:1)

我怀疑编译器插入* .exe编码时间,特殊序数(用于版本控制)和其他东西:) 强迫Delphi产生相等的二进制输出是不可能的。

答案 3 :(得分:0)

可能是,某些实际的时间戳被编译到exe文件中。