2014-04-03 54 views
0

我發現編譯器可以使用相同的.java源文件生成不同的.class文件。我試圖用Ant和Eclipse編譯.java文件,結果的文件大小不同,這使得這些文件的哈希值不匹配。將兩個.class文件與散列值比較

對於Ant,我發現有一些空的匿名內部類已經生成。那麼,如何通過散列值或其他快速匹配來自不同編譯器的.class文件呢?

注意:如果我將.class文件生成爲.java,則哈希值匹配。這是唯一的方法嗎?

+0

爲什麼你需要比較類文件?不同的編譯器設置(例如,優化級別,調試信息等)可以更改.class文件,從而使匹配變得困難......您通過比較類文件試圖歸檔什麼? –

+0

我想要一個快速檢測文件重用的方法。用於分析。 – Zyoo

回答

2

那麼,如何通過散列值或其他快速匹配來自不同編譯器的.class文件呢?

簡而言之,我不認爲有一個簡單的方法。不同的編譯器可以從相同的源代碼中生成不同的字節碼。

雖然這可能值得研究文獻。快速谷歌搜索已經發現了這一點:

A Plagiarism Detection Technique for Java Program Using Bytecode Analysis

政勳吉,Gyun胡煥^古道町

摘要大多數抄襲檢測系統評估的源代碼的相似性和檢測剽竊程序對。如果我們在剽竊檢測中使用源代碼,源代碼安全性可能是一個重大問題。基於目標代碼的抄襲檢測可以用來保護源代碼的安全。在本文中,我們提出了一種新的使用字節碼的Java程序抄襲檢測技術,而無需引用其源代碼。使用字節碼的抄襲檢測程序由兩個主要步驟組成。首先,我們通過分析方法的代碼區域從Java類文件生成令牌序列。然後,我們使用自適應局部比對來評估令牌序列之間的相似性。根據實驗結果,我們可以發現源代碼和字節代碼的相似度分佈非常相似。而且,對於典型的測試數據,源代碼對與字節代碼對的相似性之間的相關性足夠高。使用字節碼的抄襲檢測系統可以在通過源代碼比較檢測抄襲之前用作初步驗證工具。

還有Deducing Similarities in Java Sources from Bytecodes,但它的Java術語(1998)極其過時。雖然可能仍然是一個有價值的想法來源。

我相信還有更多的文獻。這是我能在兩分鐘內找到的。

+0

謝謝,我實際上想要構建代碼相似性檢測,但是我想先使用散列值快速檢測庫文件相似性,以便在進一步檢測時排除它。欣賞鏈接。 – Zyoo

+1

@Zyoo:我不認爲哈希是檢測相似性的正確工具,除非你想出了一些局部敏感的哈希方案(http://en.wikipedia.org/wiki/Locality-sensitive_hashing)。 – NPE