Как "декодировать" файлы классов Java? [закрыто]
Описание проблемы для StackOverflow.com
Я столкнулся с проблемой и надеюсь на вашу помощь. Мне нужно узнать, какую программу можно использовать для декомпиляции .class файла в Java. Получится ли в итоге Java-код или это будет лишь ассемблерный код для JVM?
Я часто встречал на этом сайте ответы от пользователей, которые "декомпилировали" Java-классы, чтобы посмотреть, как компилятор оптимизирует определённые конструкции. Однако не могу найти конкретную информацию о том, какие инструменты они использовали и какой результат в итоге получается.
К сожалению, моё сообщение было закрыто, так как в нем содержались запросы на рекомендации существующих библиотек или инструментов, что не соответствует правилам сообщества. В связи с этим, прошу вас поделиться любыми знаниями или опытом по этой теме, чтобы я мог получить более точную информацию.
Заранее благодарю за помощь!
5 ответ(ов)
Чтобы увидеть исходный код Java, попробуйте использовать декомпилятор. Например, поищите jad.
Если вам нужно увидеть байт-код, просто используйте javap, который идет в комплекте с JDK.
Вот список декомпиляторов на февраль 2015 года:
Procyon – открытый исходный код, https://bitbucket.org/mstrobel/procyon/wiki/Java%20Decompiler
CFR – бесплатный, исходный код недоступен, http://www.benf.org/other/cfr/
JD – бесплатен только для некоммерческого использования, http://jd.benow.ca/
Fernflower – открытый исходный код, https://github.com/fesh0r/fernflower
JAD – упоминается здесь только в исторических целях. Бесплатен, исходный код недоступен, http://varaneckas.com/jad/ Устаревший, не поддерживается и неправильно декомпилирует Java 5 и последующие версии.
Вы можете протестировать перечисленные декомпиляторы онлайн без установки и сделать информированный выбор.
Декомпиляторы Java в облаке: http://www.javadecompilers.com/
Похоже, что все ссылки на JAD, которые были упомянуты ранее, не работают. Я нашел этот сайт: http://www.varaneckas.com/jad. Он отлично работает (по крайней мере, на Linux)! На Ubuntu 11.10 мне пришлось скачать статическую версию по какой-то причине.
JAD — это удобный и простой инструмент для декомпиляции Java-кода. Если вы просто хотите увидеть методы, вы можете использовать javap
.
Инициализация ArrayList в одну строчку
Почему нет ConcurrentHashSet, если есть ConcurrentHashMap?
Как объявить массив в одну строку?
Загрузка JDK Java на Linux через wget приводит к отображению страницы лицензии вместо установки
Создание репозитория Spring без сущности