使用soot框架(v.2.5.0)我正在尝试加载某个类:
SootClass clazz = Scene.v().loadClassAndSupport("example.MyClass");
在致电Scene#loadClassAndSupport
之前,课程example.MyClass
不在场景中 - 这是正确的
该类在soot类路径中也不存在,并且上面的语句抛出一个RuntimeException
,告诉该类无法找到。这也是正确的行为。
但是在抛出异常之后,班级example.MyClass
就在烟灰的场景中!
因此,对Scene#loadClassAndSupport
的另一次调用会返回SootClass
个实例,其中isPhantom
设置为false,但它没有任何方法或字段。
更新
一个丑陋但有效的解决方法是:
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...
}
答案 0 :(得分:1)