我正在處理的遺留項目包含一些外部庫,其形式爲一組二進制jar文件。我們決定爲了進行分析和修補,我們希望收到這個庫的源代碼,使用它們來構建新的二進制文件,經過詳細和足夠長的迴歸測試後切換到這些二進制文件。如何檢查二進制文件是否由特定源構建
假設我們已經檢索並建立了源(我實際上是在規劃階段)。在進行真正的測試之前,我希望執行一些「兼容性檢查」,以排除源代表與「舊」二進制文件中的內容顯着不同的可能性。
使用javap
工具我能夠提取用於編譯的JDK版本(至少我相信它是JDK的版本)。它說,二進制文件是使用主版本46和次版本0構建的。根據this article它映射到JDK 1.2。
假設相同的JDK將用於源編譯。
的問題是: 有沒有驗證的可靠的和可能有效的方法,如果這兩個二進制文件是由相同的源代碼構建的?我想知道所有方法簽名和類定義是否相同,以及方法實現的大部分或全部是否相同/相似。
這個庫很大,所以我認爲反編譯的二進制文件的詳細分析可能不是一個選項。
反射('java.lang.reflect')應爲類和方法簽名做,但不執行。 – SJuan76
如何比較兩個二進制文件的MD5哈希值? – sp00m
爲了將來的參考,最簡單的方法就是使用像Git,Subversion或Mercurial這樣的版本控制系統,然後在您的系統中包含版本號和/或變更集ID jar,比如在清單文件中。 – Brian