为了以编程方式分析.java文件,我刚刚开始使用Soot。从我所阅读的内容来看,Soot似乎是一个非常强大的源代码分析工具,但我在网上找到的大多数材料都是将其用作命令行工具。
我需要以编程方式从给定目录中的.java文件加载类,构建程序依赖图(PDG)并做一些程序切片。我仍然不确定是否烟灰提供切片,但我可以实现自己一旦我有了PDG。
开始,我尝试使用下面的代码:
Options.v().set_whole_program(true);
Options.v().set_soot_classpath("...");
SootClass c = Scene.v().loadClassAndSupport("MyClass");
c.setApplicationClass();
CHATransformer.v().transform();
CallGraph cg = Scene.v().getCallGraph();
然而,它不起作用。它在loadClassAndSupport
调用中卡住了几秒钟,然后我的程序突然存在,没有给出任何异常或任何东西。
如果有人试图以编程方式使用Soot,我需要设置其他选项吗?或者你能给我指出一个教程,在那里他们从头开始以编程方式设置Soot ?
你不应该使用loadClassAndSupport。插入一个"场景转换器"代替。切片可以通过使用FlowDroid扩展到烟灰实现。它支持Android和Java代码切片。