【问题标题】:Using Soot programmatically to analyze .java source files以编程方式使用 Soot 分析 .java 源文件
【发布时间】:2015-10-07 08:12:30
【问题描述】:

我刚刚开始使用 Soot 以编程方式分析 .java 文件。根据我的阅读,Soot 似乎是一个非常强大的源代码分析工具,但我在网上找到的大部分资料都谈到将其用作命令行工具。

我需要以编程方式从给定目录中的 .java 文件加载类,构建程序依赖图 (PDG) 并进行一些程序切片。我仍然不确定 Soot 是否提供切片,但我可以在拥有 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 的教程吗?

【问题讨论】:

  • 你成功了吗?如果是,怎么做?
  • 我最终使用 Wala (wala.sourceforge.net/wiki/index.php/Main_Page) 进行我需要的源代码分析。我发现它使用起来更容易一些,并且有更多的在线文档。
  • @Rizkallah 很想知道 wala 是否足以进行程序切片。另外,你的实现是开源的吗?

标签: code-analysis static-code-analysis soot program-slicing


【解决方案1】:

您不应该使用 loadClassAndSupport。改为插入“场景转换器”。可以通过对 Soot 使用 FlowDroid 扩展来实现切片。它支持Android和Java代码的切片。

【讨论】:

    猜你喜欢
    • 2012-06-23
    • 2012-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-02
    • 2023-04-08
    • 2011-09-23
    • 1970-01-01
    相关资源
    最近更新 更多