1
使用煤煙框架(v.2.5.0)我試圖加載某一類:煤煙 - 如何防止loadClassAndSupport創建一個空的SootClass?
SootClass clazz = Scene.v().loadClassAndSupport("example.MyClass");
在調用Scene#loadClassAndSupport
類example.MyClass
不是在場景中 - 這是正確的。
該類也不存在於煙塵類路徑中,並且上面的語句拋出RuntimeException
,告訴該類無法找到。這也是正確的行爲。
但之後異常已被拋出類example.MyClass
是在煙塵的場景!
因此,Scene#loadClassAndSupport
的另一個呼叫返回SootClass
實例,其中isPhantom
設置爲false,但它沒有任何方法或字段。
- 這是煙塵框架打算的行爲,還是它的錯誤?
- 如果是這樣,我該如何防止菸灰向場景中添加「虛擬」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 –