我目前正在开发一个程序,它将两个控制流图相互比较(图表是用Soot生成的)。这些图表属于两个不同的类别;所以每个人都有一个cfg。
目前我正在使用以下内容加载类:
SootClass sClassNew = Scene.v().loadClassAndSupport("Calc");
sClassNew.setApplicationClass();
SootClass sClassOld = Scene.v().loadClassAndSupport("Calc2");
sClassOld.setApplicationClass()
如果我通过右键单击项目添加一个包含Calc.java和Calc2.java类的文件夹,这是有效的Java构建路径|添加外部类文件夹|选择文件夹。
不幸的是,这不是我想要的:
一个重要的注意事项是Soot只会从Soot的类路径中找到的JAR文件和目录中加载文件。 有谁知道如何解决这两个问题呢?
答案 0 :(得分:0)
Soot并没有真正设置来解决这个问题。它的主要数据结构是Scene,它包含了它所依赖的所有类,并且场景只能为每个类名保存一个类实例 - 没有两个不同的版本。
话虽如此,我们最近为Soot建立了一个名为Reviser的扩展(目前正在提交):https://github.com/StevenArzt/reviser Reviser逐步更新程序的过程间控制流程图和诱导的IFDS / IDE分析信息。为了完成这项工作,我们不得不使用Soot的类加载机制,但是;这远非微不足道。如果您对这些细节感兴趣,请发送个人邮件给Steven Arzt和我。