Il progetto legacy su cui sto lavorando include alcune librerie esterne in una serie di file jar binari. Abbiamo deciso che per l'analisi e le potenziali patching, vogliamo ricevere le fonti di questa libreria, usarle per costruire nuovi binari e dopo aver eseguito il test di regressione dettagliato e abbastanza lungo su questi binari.Come verificare se i binari sono creati da particolari fonti
Si supponga di aver già recuperato e creato le origini (in realtà sono in fase di pianificazione). Prima di veri test, vorrei eseguire alcuni "controlli di compatibilità" per escludere la possibilità che le fonti rappresentino qualcosa di molto diverso da ciò che è presente nei "vecchi" binari.
Utilizzo dello strumento javap
Sono stato in grado di estrarre la versione di JDK utilizzata per la compilazione (almeno credo sia la versione di JDK). Dice che i binari sono stati creati usando la versione principale 46 e la minore 0. Secondo this article, si associa a JDK 1.2.
Si supponga di utilizzare lo stesso JDK per la compilazione delle fonti.
La domanda è la seguente: Esiste un metodo di verifica affidabile e possibilmente efficace se entrambi questi binari sono creati dalle stesse origini? Vorrei sapere se tutte le firme dei metodi e le definizioni delle classi sono identiche e se la maggior parte o forse tutte le implementazioni dei metodi sono identiche/simili.
La libreria è abbastanza grande, quindi penso che l'analisi dettagliata dei binari decompilati potrebbe non essere un'opzione.
Reflection ('java.lang.reflect') dovrebbe fare per le firme di classe e di metodo, ma non per l'attuazione. – SJuan76
Che dire del confronto tra gli hash MD5 dei due binari? – sp00m
Per riferimento futuro, il modo più semplice per capire come andare avanti (non ti aiuterà ora) è usare un sistema di controllo della versione come Git, Subversion o Mercurial, quindi includere il numero di revisione e/o l'ID del changeset nel tuo jar, come nel file manifest. – Brian