有没有办法在 Visual C++ 中强制相同的代码生成相同的二进制文件?换句话说,关闭 PE 中的时间戳或强制 PE 中的时间戳为某个固定值?

有帮助吗?

解决方案 2

我想你可以写一个实用工具,打开PE,校验设置为0,设置时间戳你喜欢什么,重新计算CRC,然后写回来了。如果有,以确保最佳二重复性的官方途径,虽然这将是很好。

有关的更多信息: http://msdn.microsoft.com/en-us/magazine/cc301805。 ASPX

其他提示

它不仅仅是一个时间戳 - 还有一个用于 PDB 匹配的嵌入式 GUID - 正如 John Robbins 所言 解释.

即使除此之外,也没有办法强制编译器生成一致的结果,正如 Jim Griesmer 所说 解释 -

编译器编写者对生成正确运行的代码并快速生成它更感兴趣,而不是确保生成的任何内容在硬盘驱动器上的布局相同。由于优化代码的方法和实现多种多样,因此一个构建最终可能会比另一个构建花费更多的时间来完成一些额外或不同的事情。因此,最终结果可能是具有相同功能的不同位组。

因此,功能和部分顺序是 不是 保证在最终的 PE 中顺序一致。链接中有一个示例。

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