Das Legacy-Projekt, an dem ich gerade arbeite, enthält einige externe Bibliotheken in Form von binären JAR-Dateien. Wir haben beschlossen, dass wir für die Analyse und potentielles Patchen Quellen dieser Bibliothek erhalten wollen, sie verwenden, um neue Binärdateien zu erstellen, und nach ausführlichen und langwierigen Regressionstests zu diesen Binärdateien wechseln.So überprüfen Sie, ob Binärdateien aus bestimmten Quellen erstellt werden
Angenommen, wir haben die Quellen bereits abgerufen und gebaut (ich bin gerade in der Planungsphase). Vor dem eigentlichen Testen würde ich gerne einige "Kompatibilitätsüberprüfungen" durchführen, um die Möglichkeit auszuschließen, dass die Quellen etwas darstellen, das sich grundlegend von dem unterscheidet, was in den "alten" Binärdateien ist.
Mit dem javap
Tool konnte ich die Version von JDK extrahieren, die für die Kompilierung verwendet wurde (zumindest glaube ich, dass es die Version von JDK ist). Es besagt, dass die Binärdateien mit der Hauptversion 46 und der Minor 0 erstellt wurden. Gemäß this article wird JDK 1.2 zugeordnet.
Angenommen, das gleiche JDK würde für die Quellenkompilierung verwendet werden.
Die Frage ist: Gibt es eine zuverlässige und möglicherweise wirksame Methode zur Überprüfung, ob diese beiden Binärdateien aus den gleichen Quellen gebaut werden? Ich würde gerne wissen, ob alle Methodensignaturen und Klassendefinitionen identisch sind und ob die meisten oder alle Methodenimplementierungen identisch/ähnlich sind.
Die Bibliothek ist ziemlich groß, daher denke ich, dass eine detaillierte Analyse von dekompilierten Binärdateien keine Option sein kann.
Reflection ('java.lang.reflect') sollte für Klassen- und Methodensignaturen, aber nicht für die Umsetzung tun. – SJuan76
Was ist mit dem Vergleich der MD5-Hashes der beiden Binärdateien? – sp00m
Zukünftige Referenz, der einfachste Weg, um herauszufinden, vorwärts (es wird Ihnen jetzt nicht helfen) ist ein Versionskontrollsystem wie Git, Subversion oder Mercurial, dann die Revisionsnummer und/oder Changeset-ID in Ihrem verwenden jar, z. B. in der Manifestdatei. – Brian