5

爲了進行二進制/源代碼驗證,我希望能夠在相隔2周的同一臺計算機上進行兩次編譯,並使二進制文件相同並因此通過一些校驗和測試。使用Delphi 6編譯兩次並在二進制文件上獲得相同的校驗和

到目前爲止,我發現最有可能的時間戳將由編譯器寫入二進制文件。我可以通過根據這個msdn文章對dumpbin/rawdata結果進行比較來解決這個問題。

http://support.microsoft.com/kb/164151

然而DUMPBIN導致大約十幾個地方仍不同,差異仍然顯得某種時間戳(從A1 73改變到C4 76)構成。

我認爲這是delphi編譯器放入代碼/數據部分的時間戳,但是我找不到發生了什麼或者如何關閉它。擺弄各種編譯器/鏈接器選項並沒有改變這種行爲。

任何幫助將不勝感激。

+0

我只是古董(沒有任何意圖):你想驗證exe文件校驗和在2個版本之間沒有變化的場景是什麼? – 2009-12-01 23:04:59

+0

我會得到每個「。obj「(或Delphi中的等價物)有一個時間戳,它正在找到進入.exe的時間戳。 – jmucchiello 2009-12-01 23:07:58

+0

與代碼傳輸有關,其中對方需要測試二進制文件,然後驗證代碼是否與其相對應。迄今爲止還沒有能夠想出另一種方案來做到這一點。 – 2009-12-02 01:37:06

回答

1

我們在幾年前研究這個問題,我記得的回答很乾脆的人的Borland/CodeGear的/ Embarcadero公司不同意這種看法,編譯器應該產生完全相同的輸出具有完全相同的輸入(假定當前日期時間不被認爲是輸入)。

這是令人失望的,但考慮到德爾福提升了主要版本,它可能不會改變。

0

不幸的是,我還沒有聽說過這個問題的任何答案。

這不僅僅是時間戳,而且有些地方的內存中有幾個字節的隨機垃圾會出現在結果中。

1

基於對這個問題的評論,我認爲你正在尋找這個問題的答案:

我如何驗證某個二進制由一組特定的源文件的創建

一種方法是有一個自動化構建過程:

  1. 插入在源代碼中的唯一verififcation標籤(可能是作爲一個GUID字符串或一些簡單否則在一個包含文件)
  2. 編譯使用驗證標籤
  3. 包在傳送目錄樹產生的二進制和源代碼

你必須確保你的源代碼中實際使用的是驗證標籤的二進制文件(例如通過在大約盒子中顯示或類似的東西)。

我使用FinalBuilder來自動執行這樣的構建過程。

--jeroen

相關問題