2013-06-13 6 views
1

내가 특정 클래스를로드하기 위해 노력하고있어 매연 프레임 워크 (v.2.5.0) 사용 :Soot - loadClassAndSupport가 빈 SootClass를 생성하는 것을 방지하려면 어떻게해야합니까?

SootClass clazz = Scene.v().loadClassAndSupport("example.MyClass"); 

클래스 example.MyClass 장면에서 아닙니다 Scene#loadClassAndSupport를 호출하기 전에 - 맞습니다.
또한 클래스가 그을음 클래스 경로에 존재하지 않으므로 위의 명령문은 클래스를 찾을 수 없음을 알리는 RuntimeException을 던집니다. 그리고 그것은 또한 올바른 행동입니다.

그러나 예외가 발생하면 example.MyClass 그을음의 장면 안에 있습니다!
Scene#loadClassAndSupport을 다시 호출하면 isPhantom이 false로 설정되었지만 메서드 나 필드가없는 SootClass 인스턴스가 반환됩니다.

  1. 이 동작은 soot 프레임 워크에서 의도 한 것입니까, 아니면 버그입니까?
  2. 의도적으로 Soot가 장면에 "더미"SootClass를 추가하지 못하게하려면 어떻게해야합니까?
  3. 특정 클래스가 Soot의 클래스 패스에 있는지 Soot의 장면에 추가하지 않고 테스트 할 수있는 다른 방법이 있습니까?

업데이트 :
못생긴하지만 작업 해결 방법은 다음과 같습니다

try { 
    SootClass sootClass = Scene.v().loadClassAndSupport(className); 
    sootClass.setApplicationClass(); 
    // class found and loaded... 
} catch(RuntimeException e) { 
    SootClass sootClass = Scene.v().loadClassAndSupport(className); 
    Scene.v().removeClass(sootClass); 
    // class not on soot's classpath or not loadable... 
} 

답변

1

이 벌레처럼 보인다. 여기에 파일 보내 주시겠습니까? 그러면 우리가 살펴볼 것입니다.

어쨌든 이러한 문제를 논의하기에 더 좋은 장소입니다.

건배, 에릭

내가 문제를 만들었습니다
+0

: https://github.com/Sable/soot/issues/88 –