Поиск различий между версиями файла классов Java - PullRequest
5 голосов
/ 18 сентября 2008

Я работаю с большим веб-приложением на Java от коммерческого поставщика. Я получил от поставщика исправление в виде нового файла .class, которое должно решить проблему, которая возникает у нас с программным обеспечением. В прошлом применение исправлений от этого поставщика вызывало новые и совершенно не связанные с этим проблемы, поэтому я хочу понять, какие изменения вносятся еще до применения их к тестовому экземпляру.

У меня есть два файла .class бок о бок: один извлечен из текущей запущенной версии, а обновленный - от поставщика. JAD и JReversePro декомпилируют и дизассемблируют (соответственно) две версии для одного и того же вывода. Однако файлы .class имеют разные размеры, и я вижу различия в выводе od -x, поэтому они определенно не идентичны.

Какие еще шаги я могу предпринять, чтобы определить разницу между двумя файлами?

<ч /> Вывод:

Спасибо за отличные ответы. Поскольку вывод javap -c также идентичен для двух файлов классов, я собираюсь заключить, что право Давра и поставщик прислали мне плацебо. Хотя я принимаю ответ Давра по этой причине, это были Крис Маршалл и Джон Мигер, которые включили меня в javap, так что спасибо всем вам троим.

Ответы [ 4 ]

6 голосов
/ 18 сентября 2008

Если вы ищете различия в уровне API, то инструмент javap может оказать большую помощь. Он будет выводить сигнатуры методов, которые можно выводить в текстовые файлы и сравнивать с помощью обычных инструментов сравнения.

6 голосов
/ 18 сентября 2008

Возможно, они просто скомпилировали его с новой версией java-компилятора или с другими настройками оптимизации и т. Д., Чтобы функциональность была одинаковой, а код - тем же, но выходной байт-код немного отличается.

1 голос
/ 18 сентября 2008

Вы можете использовать javap (в $ JDK_HOME / bin) для декомпиляции java-файлов .class. Он скажет вам (например) версию файла класса среди прочего

1 голос
/ 18 сентября 2008

Вы можете попробовать использовать инструмент сравнения (например, бесплатный инструмент DiffMerge от SourceGear) для декомпилированных источников. Это должно выявить различия в файлах, хотя, скорее всего, это приведет к «незначительным» различиям, например, если переменные были названы по-разному в двух версиях.

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

...