Как я могу открыть файлы Java .class в удобочитаемом виде?

Я пытаюсь выяснить, что делает файл класса Java-апплета под капотом. Открытие его с помощью Блокнота или Текстпада просто показывает кучу тарабарщины.

Есть ли способ вернуть его обратно в несколько читаемый формат, чтобы я мог попытаться понять, что он делает?

  • Окружающая среда == Windows с установленной VS 2008.

person cpuguru    schedule 16.09.2008    source источник
comment
Просто семантика, разве не должно быть один = не два? == — это вопрос, а = — утверждение, и вы делаете утверждение о своей среде.   -  person icco    schedule 17.09.2008
comment
Вы можете прояснить этот вопрос? Моей первой мыслью было то, что вы хотите прочитать реальный байт-код, но, похоже, вы действительно хотите декомпилировать чужой код.   -  person Outlaw Programmer    schedule 17.09.2008
comment
@icco, = означает присваивание, == означает равенство. Он говорит, что (Окружающая среда == Windows с установленным VS2008) верно, не давая приказа установить для Окружающей среды значение Windows с установленным VS2008. Человек, который был оффтопиком и занудой.   -  person Blorgbeard    schedule 17.09.2008
comment
Для записи == не объявляет равенство; он проверяет равенство. Вы можете написать true == false, и это примерно так же значимо, как написать Environment == Windows с установленной VS 2008, то есть вообще не имеет смысла.   -  person bwerks    schedule 21.03.2013


Ответы (17)


jd-gui — лучший декомпилятор на данный момент. он может обрабатывать новые функции Java по сравнению с запылившимся JAD.

person DarenW    schedule 16.09.2008
comment
Насколько актуален этот ответ в 2020 году? - person The Coding Wombat; 24.03.2020
comment
Пока ссылка куда-то ведет, я полагаю, это хорошо. Я не знаю, есть ли сейчас лучший декомпилятор Java, поскольку я давно не использовал Java. - person DarenW; 30.03.2020

Если вы не возражаете против чтения байт-кода, javap должен работать нормально. Это часть стандартной установки JDK.

Usage: javap <options> <classes>...

where options include:
   -c                        Disassemble the code
   -classpath <pathlist>     Specify where to find user class files
   -extdirs <dirs>           Override location of installed extensions
   -help                     Print this usage message
   -J<flag>                  Pass <flag> directly to the runtime system
   -l                        Print line number and local variable tables
   -public                   Show only public classes and members
   -protected                Show protected/public classes and members
   -package                  Show package/protected/public classes
                             and members (default)
   -private                  Show all classes and members
   -s                        Print internal type signatures
   -bootclasspath <pathlist> Override location of class files loaded
                             by the bootstrap class loader
   -verbose                  Print stack size, number of locals and args for methods
                             If verifying, print reasons for failure
person Michael Myers    schedule 16.09.2008

Как указал @MichaelMyers, используйте

javap -c <name of java class file> 

чтобы получить ассемблерный код JVM. Вы также можете перенаправить вывод в текстовый файл для лучшей видимости.

javap -c <name of java class file> > decompiled.txt
person Nilashish C    schedule 16.02.2018

Вам нужен декомпилятор Java, вы можете использовать инструмент командной строки javap для этого. Кроме того, Java Decompiler HOW-TO описывает, как вы можете декомпилировать файл класса.

person Drew Frezell    schedule 16.09.2008

то, что вы ищете, это декомпилятор Java. Я рекомендую JAD http://www.kpdus.com/jad.html Это бесплатно для тех, кто не коммерческое использование и выполняет свою работу.

Примечание: это не сделает код точно таким же, как то, что было написано. то есть вы потеряете комментарии и, возможно, имена переменных, так что это будет немного сложнее, чем просто читать обычный исходный код. Если разработчик действительно скрытен, он также запутал свой код, что еще больше затруднило его чтение.

person David Beleznay    schedule 16.09.2008

cpuguru, если ваш апплет был скомпилирован с помощью javac 1.3 (или ниже), лучше всего использовать Jad.

К сожалению, последним JDK, поддерживаемым JAD 1.5.8 (14 апреля 2001 г.), является JDK 1.3.

Если ваш апплет был скомпилирован более поздним компилятором, вы можете попробовать JD-GUI : этот декомпилятор находится в стадии разработки, тем не менее, в большинстве случаев он генерирует правильные исходные коды Java для классов, скомпилированных с помощью JDK 1.4, 1.5 или 1.6.

ДаренВ, спасибо за ваш пост. JD-GUI пока не лучший декомпилятор... но я над ним работаю :)

person Emmanuel Dupuy    schedule 23.12.2008

jd-gui "http://code.google.com/p/innlab/downloads/detail?name=jd-gui-0.3.3.windows.zip&can=2&q=" — лучший и удобный вариант для декомпиляции .class. файл....

person Karthikeyan Subramanian    schedule 27.09.2013

вы также можете использовать доступные онлайн-декомпиляторы Java. Например, http://www.javadecompilers.com

person Prachi Sharma    schedule 23.02.2018

Использование Jad для его декомпиляции, вероятно, является лучшим вариантом. Если код не был запутан, он даст нормальный результат.

person Rasmus Faber    schedule 16.09.2008

Это скомпилированный код, вам нужно использовать декомпилятор, такой как JAD: http://www.kpdus.com/jad.html

person cynicalman    schedule 16.09.2008

Вам нужно использовать декомпилятор. Другие предлагали JAD, есть и другие варианты, JAD — лучший.

Я повторю комментарии, которые вы можете немного потерять по сравнению с исходным кодом. Это будет выглядеть особенно забавно, если код использует дженерики из-за стирания.

person Zac Gochenour    schedule 16.09.2008

Плагин JAD и/или JADclipse Eclipse, конечно.

person John Gardner    schedule 16.09.2008

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

person arturh    schedule 17.09.2008

Как было предложено, вы можете использовать JAD для его декомпиляции и просмотра файлов. Чтобы упростить чтение, вы можете использовать плагин JADclipse для eclipse, чтобы интегрировать JAD напрямую в eclipse, или использовать DJ Java Decompiler, который намного проще в использовании, чем JAD из командной строки.

person Community    schedule 16.09.2008

JAD — отличный вариант, если в результате вам нужен читаемый Java-код. Если вы действительно хотите покопаться во внутренностях формата файла .class, вам понадобится javap. Он связан с JDK и позволяет «декомпилировать» шестнадцатеричный байт-код в удобочитаемый ASCII. Язык, который он производит, по-прежнему представляет собой байт-код (не что-то вроде Java), но он довольно удобочитаем и чрезвычайно поучителен.

Кроме того, если вы действительно хотите, вы можете открыть любой .class файл в шестнадцатеричном редакторе и напрямую прочитать байт-код. Результат идентичен использованию javap.

person Daniel Spiewak    schedule 16.09.2008

Нет необходимости декомпилировать Applet.class. Исходный код общедоступных классов Java API поставляется с JDK (если вы решите его установить) и лучше читается, чем декомпилированный байт-код. Вы можете найти сжатый в src.zip (находится в папке установки JDK).

person Arno    schedule 16.09.2008

CFR — еще один декомпилятор Java — отличный декомпилятор для современной Java, написанной на Java 6.

person tidbeck    schedule 18.01.2017