8

商用ベンダーの大規模な Java Web アプリケーションを使用しています。ソフトウェアで発生している問題を解決するはずの新しい .class ファイルの形でベンダーからパッチを受け取りました。過去に、このベンダーからのパッチを適用すると、まったく無関係な新しい問題が発生したため、テスト インスタンスに適用する前に、変更が行われたことを理解したいと考えています。

現在実行中のバージョンから抽出されたものと、ベンダーから更新されたものです。 JADJReverseProは両方とも、2 つのバージョンを (それぞれ) 逆コンパイルおよび逆アセンブルして、同じ出力を生成します。ただし、.class ファイルはサイズが異なり、の出力に違いが見られるod -xため、完全に同一ではありません。

2 つのファイルの違いを判断するには、他にどのような手順を実行できますか?


結論:

素晴らしい反応をありがとう。2 つのクラス ファイルの出力も同じであるためjavap -c、Davr の権利とベンダーが私に偽薬を送ったと結論付けます。その理由で Davr の回答を受け入れていますが、私を javap に変えたのは Chris Marshall と John Meagher でした。3 人全員に感謝します。

4

4 に答える 4

7

機能が同じで、コードが同じであるように、新しいバージョンの Java コンパイラでコンパイルしたり、異なる最適化設定などを使用してコンパイルした可能性がありますが、出力バイトコードはわずかに異なります。

于 2008-09-17T22:13:10.277 に答える
6

API レベルの違いを探している場合は、javapツールが大きな助けになります。メソッド シグネチャが出力され、プレーン テキスト ファイルに出力され、通常の diff ツールを使用して比較できます。

于 2008-09-17T22:21:27.510 に答える
1

逆コンパイルされたソースで差分ツール (SourceGear の無料の DiffMerge ツールなど) を使用してみてください。これにより、ファイルの違いが検出されるはずですが、たとえば、2 つのバージョンで変数の名前が異なる場合など、「重要でない」違いが検出される可能性があります。

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

于 2008-09-17T22:16:42.700 に答える
1

javap ($JDK_HOME/bin 内) を使用して、java .class ファイルを逆コンパイルできます。(たとえば)クラスファイルのバージョンなどを教えてくれます

于 2008-09-17T22:20:13.300 に答える