2013-12-11 67 views
3

當我在Mac上使用Go創建某些內容時,該二進制文件具有用於重複構建的一致md5sum。但是,當我爲Windows進行交叉編譯或在Windows上進行本地編譯時,每次都會得到不同的校驗和。爲什麼重複執行Windows生成結果不同的校驗和?

這是什麼情況導致了這種情況?

[[email protected]: ~/] GOOS=windows go build 
[[email protected]: ~/] md5 -r tcollector.exe 
f66dbec001eb0e02da261b4bc70d8072 tcollector.exe 
[[email protected]: ~/] GOOS=windows go build 
[[email protected]: ~/] md5 -r tcollector.exe 
630e89fa4907b6811a3d19c99dbac2dc tcollector.exe 
[[email protected]: ~/] go build    
[[email protected]: ~/] md5 -r tcollector  
0353160b4b000c7ba9d5331a72265291 tcollector 
[[email protected]: ~/] go build   
[[email protected]: ~/] md5 -r tcollector 
0353160b4b000c7ba9d5331a72265291 tcollector 
+1

可能存在構建時間戳。 – Gabe

+0

你在使用cgo嗎? –

回答

0

窗口輸出中的某些內容取決於隨機性或時間。

我不知道比這更(如什麼是使用的變化)但不要緊

由編譯器(甚至不同版本的同一編譯器)生成的輸出會有所不同,哈希值是設計的所以類似的東西不要產生類似的輸出。

校驗和就是這樣,你可以用來檢查你是否有文件,它是正確的。

有點空答案,但沒有任何技術問題,你看到發生的事情。

3

Windows PE文件包含一個編譯時間戳,所以這是預期的 - 相隔一秒鐘編譯的二進制文件將嵌入不同的時間戳,從而產生不同的散列值。

工具/過程可用於忽略PE文件的時間戳字段和其他非功能部分,以便可以在不同時間編譯的二進制文件進行有意義的比較。例如,請參閱TrueCrypt二進制文件的這種分析:https://madiba.encs.concordia.ca/~x_decarn/truecrypt-binaries-analysis/

+1

https://code.google.com/p/go/source/browse/src/cmd/ld/pe.c#615 – alex

相關問題