我正在使用WALA进行静态分析,但是遇到了一些问题。当我建立调用图时,一些罐子有以下问题:
线程“主”中的异常java.lang.IllegalStateException:无法
创建一个入口点呼叫站点:
[中等]班
com.ibm.wala.ipa.cha.ClassHierarchy $ ClassExclusion:
找不到超类
超类名称
Lorg / eclipse / swt / dnd / ByteArrayTransfer
[中等]班
com.ibm.wala.ipa.cha.ClassHierarchy $ ClassExclusion:
找不到超类
超类名称
Lorg / eclipse / swt / widgets / Canvas
[严厉]课
com.ibm.wala.classLoader.BytecodeClass $ ClassNotFoundWarning:
Lorg / eclipse / swt / dnd / DragSourceListener
[严厉]课
com.ibm.wala.classLoader.BytecodeClass $ ClassNotFoundWarning:
Lorg / eclipse / swt / dnd / DropTargetListener
com.ibm.wala.ipa.callgraph.propagation.PropagationCallGraphBuilder.makeCallGraph(PropagationCallGraphBuilder.java:263)
wala似乎无法获取eclipse.swt程序包的.class文件,因此我无法构建调用图进行切片。
您遇到这样的问题了吗?这个问题兄弟我很久了。
问题罐子是这样的:http://mirror.bit.edu.cn/apache/commons/io/binaries/
WALA版本是1.4.3。
我的代码是:
AnalysisScope scope = AnalysisScopeReader.makeJavaBinaryAnalysisScope(jarPath, exFile);
ClassHierarchy cha = ClassHierarchyFactory.make(scope);
Iterable entrypoints = Util.makeMainEntrypoints(scope, cha);
AnalysisOptions options = new AnalysisOptions(scope, entrypoints);// the problem line
options.setReflectionOptions(ReflectionOptions.NONE);
所以,我该如何处理这个问题。非常感谢。
最佳答案
我想知道jarPath包含哪些代码。因为我发现您的入口点是由makeMainEntrypoints
方法构成的,所以此方法要求您正在分析的二进制文件的源代码必须包含main方法。
如果它不包含main方法,则可以使用AllApplicationEntrypoints
类来构建入口点,如下所示:
Iterable<Entrypoint> entrypoints = new AllApplicationEntrypoints(scope, cha);