ЧаВО по материалам форума
Java на Исходниках.Ру

Составители: Angie, d_k
Редактор: d_k



Декомпиляторы Java. (Al Dev (Alavoor Vasudevan))
(Выдержка из переведенного how-to. Все права о копировании описаны в пункте "Копирайт".)

Перевод и дополнения: Angie

Java-декомпиляторы HOW-TO

Эта документация поможет Вам декомпилировать Java-классы. Здесь приведен список декомпиляторов, которые помогут Вам получить при этом файлы исходных кодов Java. Это поможет Вам, если у Вас есть только класс-файлы, а надо видеть исходный код. Информация здесь применима ко всем операционным системам, где запущена JVM.

Введение
(Английская версия этого документа лежит тут. Вы можете посмотреть там, если ищете последнюю обновленную версию).
Java-компилятор компилирует файлы исходных кодов Java (*.java) в бинарники (*.class). Вы можете использовать декомпилятор для конвертирования java-классов в файлы исходных кодов (*.java).
Java-декомпилятор будет очень полезен, если имеются в наличии только *.class-файлы и нет доступа к исходникам. Некоторые разработчики не распространяют исходные коды вместе с бинарниками и в этом случае декомпилятор будет просто незаменим.
См. также команду "javap" от Sun Microsystems из стандартного набора jdk.
В unix, в командной строке наберите:

bash$ javap -help
bash$ javap -c <filename>.class


Могу ли я доверять Java-декомпиляторам ??!!
Для стопроцентной гарантии необходимо научное (прим. перев. - не знаю почему автор тут сделал акцент, забавно звучит =)) обоснование для доверия результатам, выводимым Java-декомпиляторами.
Чтобы проверить правильность генерации Java-декомпилятором исходного кода используйте следующую методику:
Создайте класс-файл из кода, сгенерированного компилятором:

bash$ mv myprogram.class myprogram_orig.class
bash$ javac myprogram.java


Теперь используйте комманду 'diff' (в unix) чтобы сличить два класс-файла:

bash$ diff myprogram.class myprogram_orig.class

Оба эти файла должны быть идентичны. Это доказывает то, что декомпилятор работает правильно. В DOS или Windows вы можете использовать свободнораспространяемую Cygnus Cygwin 'diff' или 'MKS' утилиты.
Эти действия дают 100% гарантии и 100% качества использования декомпиляторов. Рекомендуется проделывать эти действия каждый раз, когда вы используете декомпилятор (прим. перев. - ну это уж слишком :) )

Ссылки
Итак, список доступных Java-декомпиляторов:

Копирайт
Лицензия GNU/GPL.
Дополнительные требования - вы упоминаете имена авторов, email адреса и это требование для всех копий. Если Вы изменили или дополнили этот документ, то вы должны указать всех авторов изменений.

Содержание