2008-09-17 5 views
5

Estoy trabajando con una gran aplicación web Java de un proveedor comercial. Recibí un parche del proveedor en la forma de un nuevo archivo .class que se supone que resuelve un problema que tenemos con el software. En el pasado, la aplicación de parches de este proveedor ha provocado la aparición de problemas nuevos y completamente independientes, por lo que quiero entender el cambio que se realiza incluso antes de aplicarlo a una instancia de prueba.Encontrar diferencias entre las versiones de un archivo de clase Java

Tengo los dos archivos .class uno al lado del otro, el que se extrae de la versión actualmente en ejecución y el actualizado del proveedor. JAD y JReversePro tanto descompilar y desmontar (respectivamente) las dos versiones a la misma salida. Sin embargo, los archivos .class son de diferentes tamaños y veo diferencias en la salida de od -x, por lo que definitivamente no son idénticos.

¿Qué otros pasos podría tomar para determinar la diferencia entre los dos archivos?


Conclusión:

Gracias por las grandes respuestas. Como la salida javap -c también es idéntica para los dos archivos de clase, concluiré que Davr tiene razón y el proveedor me envió un placebo. Mientras estoy aceptando la respuesta de Davr por esa razón, fueron Chris Marshall y John Meagher quienes nos pasaron a javap, así que gracias a ustedes tres.

Respuesta

6

Es posible que simplemente lo compilaron con una nueva versión del compilador de Java, o con diferentes configuraciones de optimización, etc., para que la funcionalidad sea la misma y el código sea el mismo, pero el byte de salida es ligeramente diferente.

1

Puede intentar usar una herramienta diff (como la herramienta gratuita DiffMerge de SourceGear) en las fuentes decompiladas. Eso debería recoger las diferencias de archivos, aunque es probable que capte diferencias "insignificantes", por ejemplo, si las variables tienen un nombre diferente en las dos versiones.

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

1

Puede utilizar javap (en $ JDK_HOME/bin) para descompilar archivos Java .class. Se le dirá (por ejemplo) la versión del archivo de clase entre otras cosas

6

Si usted está buscando las diferencias de nivel API javap la herramienta puede ser de gran ayuda. Emitirá las firmas de métodos y se pueden enviar a archivos de texto plano y comparar con herramientas de diferencias normales.

Cuestiones relacionadas