2008-09-17 52 views
5

我正在從商業供應商處理大型Java Web應用程序。我已經從供應商那裏獲得了一個新的.class文件的補丁,該文件應該可以解決我們使用該軟件時遇到的問題。過去,從這家供應商那裏申請補丁已經引起了新的和完全不相關的問題,所以我想要在將它應用到測試實例之前瞭解所做的更改。查找Java類文件版本之間的差異

我有兩個.class文件並排放置,一個是從當前運行的版本提取的,另一個是來自供應商的。 JADJReversePro都將這兩個版本分別反編譯和反彙編爲相同的輸出。然而,.class文件大小不同,我看到od -x的輸出有所不同,所以它們絕對不一樣。

我可以採取哪些其他步驟來確定兩個文件之間的區別?


結論:

感謝偉大的反應。由於javap -c輸出對於兩個類文件也是相同的,因此我將得出結論,Davr的權利和供應商向我發送了安慰劑。雖然我因爲這個原因接受了Davr的回答,但是Chris Marshall和John Meagher把我轉到了javap,所以感謝你們三位。

回答

6

他們可能只是用新版本的java編譯器編譯它,或者使用不同的優化設置等編譯它,以便功能相同,代碼相同,但輸出字節碼稍有不同。

1

您可以嘗試在反編譯的源代碼上使用diff工具(如SourceGear的免費DiffMerge工具)。這應該會吸收文件差異,儘管它可能會帶來「微不足道的」差異,例如,如果在兩個版本中命名的變量不同,

http://www.sourcegear.com/diffmerge/

1

您可以使用javap的(在$ JDK_HOME/bin)添加到反編譯java的.class文件。它會告訴你(例如)類文件版本

6

如果你正在尋找API級差異,javap工具可以是一個很大的幫助。它將輸出方法簽名,可以將它們輸出到純文本文件並使用常規差異工具進行比較。