2017-11-21 15 views
0

일부 jar 파일을 디 컴파일하려고합니다. 지금까지 Procyon, JD-cmd 및 CFR을 시도했습니다.jar 디 컴파일러가 일부 jar 파일에서 멈 춥니 다 (Tried Procyon, JD-cmd 및 CFR)

그들은 모두 항아리의 대부분을 잘하고 있지만 일부 항아리에서는 얼기도하고 아무것도하지 않습니다. 그리고이 항아리들은 Procyon, JD 및 CFR과 다릅니다. (Procyon은 2 위에서 멈추지 만 JD는 4 위에서 멈 춥니 다.)

재미있는 부분은, 내가 프로세스를 죽일 때, 그들은 얼어 붙지 않고 일을 끝낸다는 것이다.

ExecuteCommand cmd = new ExecuteCommand(); 

cmd.executeCommand("java -jar " + cfrPath + " " + jarPath + " --outputdir " + unzip); 
cmd.executeCommand("java -jar " + jdPath + " -od " + unzip + " " + jarPath);  
cmd.executeCommand("java -jar " + procyonPath + " -jar " + jarPath + " -o " + unzip); 

을 그리고 ExecuteCommand.java 클래스는 다음과 같습니다 :

public class ExecuteCommand { 

    public void executeCommand(String command) { 
     String s = null; 

     try { 

      Process p = Runtime.getRuntime().exec(command); 

      BufferedReader stdInput = new BufferedReader(new 
       InputStreamReader(p.getInputStream())); 

      BufferedReader stdError = new BufferedReader(new 
       InputStreamReader(p.getErrorStream())); 

      while ((s = stdInput.readLine()) != null) { 
       System.out.println(s); 
      } 

      while ((s = stdError.readLine()) != null) { 
       System.out.println(s); 
      } 

     } 
     catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
} 

내가 뭔가 잘못하고 있는가 다음과 같이

나는 작은 자바 프로그램 내에서 그들을 사용하고? 미리 감사드립니다!

+0

실제로 냉동되었거나 오랜 시간이 걸릴 것이라고 확신합니까? – Antimony

+0

나는 프로시온 저자 여기에 – Zapdos

+0

확신합니다. 커맨드 라인에서 디 컴파일을하면, 어떤 클래스가 걸려 있는지 볼 수 있습니다. 가장 유력한 설명은 (1) 재귀 유형 매개 변수와 관련된 일종의 심층 또는 무한 루프에서 일반 유형 유추가 발견되고 있습니다. 또는 (2) 클래스 중 하나가 복잡한 제어 흐름을 가진 매우 큰 메소드를 가지고 있으며, 아마도 디 컴파일러를 트립하도록 특별히 설계된 것일 수도 있습니다. 저에게 직접 연락을 취하고 항아리 사본을 얻을 수있는 방법을 마련해 주시면 직접 볼 수 있습니다. 내 연락처 정보는 Procyon BitBucket 사이트에 있습니다. –

답변

1

내가 보낸 항아리를 받았습니다. 나는 그들 중 두 개를 성공적으로 디 컴파일 할 수 있었다. 세 번째 항아리 (가장 작은 항아리)는 비어있는 것처럼 보입니다.

어떤 Procyon 버전을 사용하고 있습니까? 내 워크 스테이션에서 최신 릴리스 (v0.5.30)와 현재 개발중인 브랜치는 교수형없이 처음 두 개의 jar 파일을 디 컴파일하지만 일부 클래스는 제대로 디 컴파일되지 않습니다. 그러나 완전히 디 컴파일하는 데 시간이 걸렸습니다. 하나는 약 48 초가 걸리고, 다른 하나는 2013 년형 Core i7에서 2 분 30 초에 걸렸습니다.

버전의 Procyon으로 디 컴파일하는 데 오랜 시간이 걸렸을 수도있는 몇 가지 클래스를 살펴 보았습니다. 이진 연산자와 관련된 가출 버그가 있었을 때 돌아 왔습니다. 최신 버전 인 경우 버전 번호를 확인하고 최신 릴리스를 가져옵니다.

참고로 Procyon은 dex2jar와 같은 도구를 통해 실행 된 클래스에서는 매우 훌륭하게 작동하지 않습니다. 최선의 경우라도 디 컴파일러가 생성 한 모든 코드에 대해 회의적인 수준의 회의를 진행해야합니다. dex2jar에 의해 변형 된 코드의 경우 출력 결과를 의심해야합니다.

+0

0.5.30도 사용하고 있습니다. 그것은 여전히 ​​수업에서 얼어 버립니다. 나는 거의 1 시간을 기다린다. 당신이 그것을 디 컴파일 할 수 있다면, 문제는 "자바 프로그램 안에서 프로 시온을 실행하는 것"입니다. 그리고 내 코드의 잘못된 부분이 무엇인지 알지 못합니다. Procyon이 수업에서 얼면 어떻게 뛸 수 있습니까? 어떻게하면 다음 수업으로 건너 뛸 수 있습니까? – Zapdos

+0

짐작할 수 있다면 최대 힙 크기일까요? 내 자신의 테스트에 대한 재정의 (override)를 지정하지 않았지만 최대 힙 크기 (예 : 2GB의'-Xmx2g '로 실행됩니다. 인수는 Procyon이 아니라'java' (JVM)가 될 것이므로'-jar [procyon jar path]'앞에 삽입 할 수 있습니다.필자는 classpath에 안드로이드 SDK 나 다른 안드로이드 프레임 워크가 없다는 것을 알아 두어야한다. (프로 시온은 제네릭과 같은 타입 정보를 위해 참조 된 클래스를 로딩하고 검사한다). –

+0

고마워.하지만 작동하지 않았다. – Zapdos