내가 특정 클래스를로드하기 위해 노력하고있어 매연 프레임 워크 (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
인스턴스가 반환됩니다.
- 이 동작은 soot 프레임 워크에서 의도 한 것입니까, 아니면 버그입니까?
- 의도적으로 Soot가 장면에 "더미"SootClass를 추가하지 못하게하려면 어떻게해야합니까?
- 특정 클래스가 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...
}
: https://github.com/Sable/soot/issues/88 –