클래스 파일을 디 컴파일하기 위해 어떤 프로그램을 사용할 수 있습니까? 실제로 Java 코드를 받습니까 아니면 JVM 어셈블리 코드입니까?
이 사이트의 Java 성능 관련 질문에서, 종종 Java 클래스 파일을 "디 컴파일"한 사람들의 응답을보고 컴파일러가 특정 사항을 최적화하는 방법을 확인합니다.
클래스 파일을 디 컴파일하기 위해 어떤 프로그램을 사용할 수 있습니까? 실제로 Java 코드를 받습니까 아니면 JVM 어셈블리 코드입니까?
이 사이트의 Java 성능 관련 질문에서, 종종 Java 클래스 파일을 "디 컴파일"한 사람들의 응답을보고 컴파일러가 특정 사항을 최적화하는 방법을 확인합니다.
답변:
2016 년 2 월 업데이트 :
www.javadecompilers.com 은 JAD를 다음과 같이 나열합니다.
가장 인기있는 Java 디 컴파일러이지만 주로이 시대에만 사용됩니다. C ++로 작성되었으므로 매우 빠릅니다.
오래되고 지원되지 않으며 올바르게 Java 5 이상을 디 컴파일하지 않습니다.
따라서 마일리지는 최근 jdk (7, 8)에 따라 다를 수 있습니다.
동일한 사이트에 다른 도구가 나열됩니다.
Salvador Valencia 가 주석 (2017 년 9 월) 에 언급 한 바와 같이 javadecompiler 는 .class
파일을 클라우드에 업로드 하고 디 컴파일 된 코드를 반환 하는 SaaS를 제공합니다 .
원래 답변 : 2008 년 10 월
Java Decompiler (아직 다른 Fast Java 디 컴파일러)에는 다음이 있습니다.
JDK 1.1.8에서 JDK 1.7.0까지의 컴파일러 및 기타 ( Jikes , JRockit 등) 와 함께 작동합니다 .
실제로 완벽하게 작동 하는 온라인 라이브 데모 버전 이 있습니다! 페이지에 jar 파일을 드롭하고 아무것도 설치하지 않고 디 컴파일 된 소스 코드를 볼 수 있습니다.
디 컴파일러가 몇 개 있습니다 ... 빠른 검색 결과 :
그리고 더 많은.
이것들은 Java 코드를 생성합니다. Java에는 JVM 바이트 코드 ( javap ) 를 볼 수있는 기능이 있습니다 .
Java 소스 코드를 보려면 디 컴파일러를 확인하십시오. jad 검색으로 이동하십시오 .
바이트 코드를 보려면 JDK와 함께 제공되는 javap 를 사용하십시오 .
나는 여러 가지를 시도했지만 Procyon 은 나에게 가장 잘 작동하는 것처럼 보였다. 현재 개발 중이며 최신 Java 버전의 많은 기능을 지원합니다.
이것들은 내가 시도한 다른 것입니다.
-skip
오류가 발생하지 않도록 명령 줄 플래그 를 사용해야했습니다 . 적극적으로 개발되었고 흥미롭게도 파이썬으로 작성되었습니다.IGNORE_EXCEPTIONS
것은 이제 명령 줄 플래그로 변경되었습니다 -skip
.
JAD Decompiler를 사용 합니다.
가 이클립스 그것을위한 플러그인, jadeclipse는 . 그것은 꽤 좋다.
그을음 은 최신 Java 코드를위한 옵션입니다. 적어도 그것은 여전히 최근에 유지되고 있다는 장점이 있습니다 ...
또한 Java Decompiler 는 독립형 GUI와 Eclipse 통합을 모두 갖춘 디 컴파일러입니다.
마지막으로 Jdec 은 언급되지 않았지만 다른 옵션만큼 세련되지는 않았습니다.
2015 년 2 월 기준으로 디 컴파일러 목록은 다음과 같습니다.
프로키온 , 오픈 소스, 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 링크가 끊어진 것 같습니다.이 사이트를 찾았습니다. 훌륭하게 작동합니다 (적어도 Linux의 경우)! 우분투 11.10에서는 어떤 이유로 든 정적 파일을 다운로드해야했습니다.
Java 컴파일러가 특정 작업을 수행하는 방법을 보려면 디 컴파일을 원하지 않고 분해하고 싶습니다. 디 컴파일에는 바이트 코드를 Java 소스로 변환하는 것이 포함됩니다. 즉, 많은 저수준 정보가 손실되며 컴파일러 최적화에 대해 궁금한 경우 관심이있는 정보 일 것입니다.
어쨌든 오픈 소스 Java 디스어셈블러를 작성했습니다 . Javap와 달리 이것은 병리학 적 클래스에서도 작동하므로 난독 화 도구가 클래스에서 수행하는 작업을 볼 수 있습니다. 권장하지는 않지만 디 컴파일을 수행 할 수도 있습니다.
JAD는 나를 위해 작동하지 않으므로 (Ubuntu 11.10 문제) 앞으로 나아가서 JODO에 뛰어 들었습니다 . 적어도 Open Java 소스 코드가 있고 내 .class를 올바르게 디 컴파일 할 수있었습니다 .
먼저 '분기 / 일반' 분기 를 확인하는 것이 좋습니다 . 트렁크가 안정적이지 않습니다.
IntelliJ IDEA 플랫폼에서는 Java Decompiler IntelliJ Plugin을 사용할 수 있습니다 . 디버깅 프로세스 중에 모든 Java 소스가없는 경우에도 모든 Java 소스를 표시 할 수 있습니다. 유명한 도구 JD-GUI를 기반으로합니다 .
AndroChef Java Decompiler 를 사용하면 apk, dex, jar 및 java 클래스 파일을 디 컴파일 할 수 있습니다. 간단하고 쉽습니다. AndroChef JD는 FernFlower를 기반으로 합니다 . 10 번의 무료 사용으로 평가할 수 있습니다.
AndroChef는 제네릭, 열거 형 및 주석과 같은 Java 언어 기능을 지원합니다. 일부 연구에 따르면 AndroChef Java Decompiler는 전통적인 Java 컴파일러로 생성 된 Java 응용 프로그램의 98.04 %를 매우 높은 복구 속도로 디 컴파일 할 수 있습니다. Java 및 Dalvik 바이트 코드 (DEX, APK)를 읽을 수있는 Java 소스로 디 컴파일 할 수있는 간단하지만 강력한 도구입니다.
OSX의 경우 jarzilla 또는 JD-GUI를 권장합니다.
둘 다 jar, war 등을 볼 수 있습니다. 파일 내용을 저장하고 그 안의 모든 클래스 파일을 디 컴파일합니다.
Jarzilla : https://code.google.com/p/jarzilla/
JD-GUI : http://jd.benow.ca/