在Eclipse中动态加载Soot的Java类文件

时间:2013-11-29 09:35:32

标签: java eclipse eclipse-plugin soot

我目前正在开发一个程序,它将两个控制流图相互比较(图表是用Soot生成的)。这些图表属于两个不同的类别;所以每个人都有一个cfg。

目前我正在使用以下内容加载类:

   SootClass sClassNew = Scene.v().loadClassAndSupport("Calc");     
   sClassNew.setApplicationClass();

   SootClass sClassOld = Scene.v().loadClassAndSupport("Calc2");        
   sClassOld.setApplicationClass()

如果我通过右键单击项目添加一个包含Calc.java和Calc2.java类的文件夹,这是有效的Java构建路径|添加外部类文件夹|选择文件夹。

不幸的是,这不是我想要的:

  1. 这两个类具有相同的名称,因为它们是彼此不同的版本。换句话说,一个类是另一个类的更新版本。
  2. 执行程序时,我想让用户能够选择文件,以便构建cfg。因此,我必须删除上述步骤,以便添加类,并需要一种在运行时添加它们的方法。
  3. 一个重要的注意事项是Soot只会从Soot的类路径中找到的JAR文件和目录中加载文件。 有谁知道如何解决这两个问题呢?

1 个答案:

答案 0 :(得分:0)

Soot并没有真正设置来解决这个问题。它的主要数据结构是Scene,它包含了它所依赖的所有类,并且场景只能为每个类名保存一个类实例 - 没有两个不同的版本。

话虽如此,我们最近为Soot建立了一个名为Reviser的扩展(目前正在提交):https://github.com/StevenArzt/reviser Reviser逐步更新程序的过程间控制流程图和诱导的IFDS / IDE分析信息。为了完成这项工作,我们不得不使用Soot的类加载机制,但是;这远非微不足道。如果您对这些细节感兴趣,请发送个人邮件给Steven Arzt和我。