我正在使用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
[SEVERE]类 com.ibm.wala.classLoader.BytecodeClass $ ClassNotFoundWarning: Lorg / eclipse / swt / dnd / DragSourceListener
[SEVERE]类 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);
那么,我该如何处理这个问题。非常感谢。
答案 0 :(得分:0)
我想知道jarPath包含哪些代码。因为我发现您的入口点是由makeMainEntrypoints
方法构成的,所以此方法要求您要分析的二进制文件的源代码必须包含main方法。
如果它不包含main方法,则可以使用AllApplicationEntrypoints
类来构建入口点,如下所示:
Iterable<Entrypoint> entrypoints = new AllApplicationEntrypoints(scope, cha);