2008-09-17 7 views
5

Ich arbeite mit einer großen Java-Webanwendung von einem kommerziellen Anbieter. Ich habe einen Patch vom Hersteller in Form einer neuen .class-Datei erhalten, die ein Problem lösen soll, das wir mit der Software haben. In der Vergangenheit hat das Anwenden von Patches dieses Anbieters zu neuen und völlig unabhängigen Problemen geführt. Daher möchte ich die vorgenommenen Änderungen verstehen, bevor ich sie auf eine Testinstanz anwende.Unterschiede zwischen Versionen einer Java-Klassendatei finden

Ich habe die beiden .class-Dateien nebeneinander, die aus der aktuell laufenden Version und die aktualisierte aus dem Hersteller extrahiert. JAD und JReversePro dekompilieren und disassemblieren beide Versionen auf den gleichen Ausgang. Allerdings haben die .class-Dateien unterschiedliche Größen und ich sehe Unterschiede in der Ausgabe von od -x, also sind sie definitiv nicht identisch.

Welche anderen Schritte könnte ich unternehmen, um den Unterschied zwischen den beiden Dateien zu ermitteln?


Fazit:

Dank für die großen Antworten. Da die Ausgabe javap -c für die beiden Klassendateien ebenfalls identisch ist, werde ich zu dem Schluss kommen, dass Davr Recht hat und der Verkäufer mir ein Placebo geschickt hat. Während ich Davrs Antwort aus diesem Grund akzeptiere, waren es Chris Marshall und John Meagher, die mich zu javap brachten, also vielen Dank an euch drei.

Antwort

6

Es ist möglich, dass sie es nur mit einer neuen Version des Java-Compilers oder mit anderen Optimierungseinstellungen usw. kompiliert haben, so dass die Funktionalität die gleiche ist und der Code derselbe ist, aber der Ausgabe-Bytecode ist etwas anders.

1

Sie könnten versuchen, ein Diff-Tool (wie das kostenlose DiffMerge-Tool von SourceGear) für die dekompilierten Quellen zu verwenden. Das sollte die Dateiunterschiede aufnehmen, obwohl es wahrscheinlich "unbedeutende" Unterschiede aufgreifen wird, zum Beispiel wenn Variablen in den zwei Versionen unterschiedlich benannt wurden.

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

1

können Sie javap verwenden (in $ JDK_HOME/bin) java Class-Dateien zu dekompilieren. Es wird Ihnen (zum Beispiel) die Klassendateiversion unter anderem mitteilen

6

Wenn Sie nach API-Level-Unterschieden suchen, kann das Tool javap eine große Hilfe sein. Es werden die Methodensignaturen ausgegeben, und diese können in einfache Textdateien ausgegeben und mit normalen Diff-Werkzeugen verglichen werden.