为什么Repeated Go Windows构建导致不同的校验和?

时间:2013-12-11 16:26:49

标签: go

当我在Mac上使用Go构建内容时,二进制文件具有一致的md5sum用于重复构建。但是,当我为Windows进行交叉编译或在本机上构建Windows时,每次都会得到不同的校验和。

导致这种情况的是什么?

[kbrandt@glade: ~/] GOOS=windows go build
[kbrandt@glade: ~/] md5 -r tcollector.exe
f66dbec001eb0e02da261b4bc70d8072 tcollector.exe
[kbrandt@glade: ~/] GOOS=windows go build
[kbrandt@glade: ~/] md5 -r tcollector.exe
630e89fa4907b6811a3d19c99dbac2dc tcollector.exe
[kbrandt@glade: ~/] go build             
[kbrandt@glade: ~/] md5 -r tcollector    
0353160b4b000c7ba9d5331a72265291 tcollector
[kbrandt@glade: ~/] go build         
[kbrandt@glade: ~/] md5 -r tcollector
0353160b4b000c7ba9d5331a72265291 tcollector

2 个答案:

答案 0 :(得分:3)

Windows PE文件包含编译时间戳,所以这是预期的 - 相隔一秒编译的二进制文件将嵌入不同的时间戳,因此会有不同的哈希值。

可以使用工具/过程忽略PE文件的时间戳字段和其他非功能部分,以便可以有意义地比较在不同时间编译的二进制文件。例如,请参阅TrueCrypt二进制文件的分析:https://madiba.encs.concordia.ca/~x_decarn/truecrypt-binaries-analysis/

答案 1 :(得分:0)

Windows输出中的某些内容取决于随机性或时间。

我不知道更多(就像它使用的更改)但无关紧要

编译器生成的输出(甚至是同一编译器的不同版本)会有所不同,散列设计,所以类似的东西会产生类似的输出。

校验和就是这样,你可以用它来检查你是否有文件,这是正确的。

有点空答案但是你看到的事情并没有技术问题。