Тестируем декомпиляторы java.
Декомпиля́тор — это программа, транслирующая исполняемый модуль (полученный на выходе компилятора) в относительно эквивалентный исходный код на языке программирования высокого уровня.
Задача: с помощью Google отыскать несколько самых популярных java декомпиляторов и провести сравнительную характеристику возвращаемого исходного кода.
Решение:
Этап первый - Ищем декомпиляторы.
Из первой 10ки выдачи Google выбираем 4 декомпилятора, это:
http://www.reversed-java.com/fernflower/ - онлайн декомпилятор, свободное использование.
http://dj.navexpress.com/index.htm - есть демо-версия на 10 запусков, дальше за программу просят UAH 164.08
http://java.decompiler.free.fr/ - свободное использование, доступен в виде как отдельного приложения так и плагина к Eclipse.
http://cavaj-java-decompiler.en.softonic.com/ - свободное использование.
Этап второй - Какой код декомпилировать?
Необходим код, который бы содержал как можно больше разных языковых конструкций, например, вот такой:
Этап третий - Декомпиляция.
fernflower:
DJ Java Decompiler:
http://java.decompiler.free.fr/:
cavaj:
Этап четвертый - Анализ полученных результатов.
Как видим, не один из декомпиляторов не смог на 100% восстановить исходных код - и это не удивительно, ведь, например, в байт коде, не сохраняются имена переменных, плюс другие особенности, однако ближе всего к действительности оказались два декомпилятора: fernflower и http://java.decompiler.free.fr/.
А так как http://java.decompiler.free.fr/ поставляется еще как плагин к Eclipse - то это однозначно наш выбор.
Материалы, которые могут вас заинтересовать
- Почему локальные вложенные классы имеют доступ только к final переменным?
- Java .class file version или под какую джаву скомпилирован класс?
- Играем в компилятор. Часть 3.
- Elementary Java.
- Играем в компилятор. Часть 2.
- Играем в компилятор.
- Elementary Java.
- Когда есть свободная минутка. Java задача.
- Eclipse и JUnit. Пишем тест.







Отличный обзор.
vfedorov, спасибо.
Отправить комментарий