相同的源但不同的二进制文件

时间:2012-12-30 16:17:34

标签: compiler-construction windows-ce disassembly portable-executable

我有一个WinCE6000 OSDesign,但由于历史原因,MS不建议在文件夹下进行修改和额外模块。因此,我们开始将不属于原始MS传送的所有内容移至另一个文件夹< 3rdParty&gt ;.

您可能知道WinCE有一个复杂的构建机制但是在完成重构之后我们设法运行了SYSGEN。以前我们被迫运行Build& amp; SysGen获得nk.bin

我们考虑一种机制,确保在重构​​后没有任何改变。验证包括将重构的构建树与现有的源树进行比较。我们比较了ce.bib文件的内容和内容,并且文件的数量和名称是相同的。但后来我们意识到有些二进制文件有不同的大小。在比较了这些exe和二进制文件之后,我们发现文件中存在差异。但这没有意义。因为我们没有修改任何源代码。我们所做的只是将一些模块移动到另一个位置并修改源文件。

我们在Beyond Compare和PE文件查看器中观察到的差异表明有时.text部分和有时.data部分是不同的。

我们希望确保重构不会通过功能影响生成的图像。我们知道PE格式有时间戳,但我认为它们不会产生二进制大小的2K。

你们之前是否遇到过这样的问题? 最诚挚的问候

1 个答案:

答案 0 :(得分:1)

这里有来自MS的自我解释帖子。 http://support.microsoft.com/kb/164151

注意:在连续构建中构建相同的源文件时,无法保证Visual C ++将生成相同的二进制映像。但是,保证EXE(或DLL)在执行时的行为方式完全相同,所有其他条件相同。编译和链接选项以及链接顺序在两个二进制图像是否将进行相同比较时发挥作用。