6

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

4

2 回答 2

4

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

即便如此,正如 Jim Griesmer解释的那样,没有办法强制编译器生成一致的结果-

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

因此,函数和部分的顺序不能保证在结果 PE 中的顺序一致。一个例子是在链接。

于 2009-09-07T18:12:23.293 回答
3

我想您可以编写一个实用程序来打开 PE,将校验和设置为 0,将时间戳设置为您喜欢的值,重新计算 crc,然后将其写回。不过,如果有一种官方方法可以确保完美的二进制再现性,那就太好了。

有关详细信息:http: //msdn.microsoft.com/en-us/magazine/cc301805.aspx

于 2009-09-01T16:13:47.017 回答