【问题标题】:How to create a control-flow graph with Soot?如何使用 Soot 创建控制流图?
【发布时间】:2017-07-06 09:23:45
【问题描述】:

一段时间以来,我一直在努力用Soot 创建一个控制流图,我有点迷失在它的tutorials 中。我没有将 Soot 用作 Eclipse 插件,而是尝试将 Soot 用作库或 API。

我想做的是,我有一堆 Java 项目,我想创建/生成这些项目的控制流图。我还看到 Soot 中有一个功能可以生成“DOT”格式的控制流图,这对我来说也是完全可以接受的。

任何说明如何使用 Soot 创建/生成控制流图的指南或代码示例都很棒!

【问题讨论】:

    标签: java static-analysis control-flow-graph soot


    【解决方案1】:

    您可以通过创建一个新的 ExceptionalUnitGraph 并将方法的 SootBody 传递给它来创建一个方法本地 CFG。 wiki 中的 Soot 教程向您展示了如何做到这一点。

    要获得跨过程 CFG,即 ICFG,您可以使用 Soot 扩展 Heros: https://github.com/Sable/heros/blob/develop/src/heros/InterproceduralCFG.java

    【讨论】:

    • 感谢您的回复。但是,我想知道是否可以选择将 Java 项目作为输入并将其作为 CFG 接收输出。因为我从 Javadoc 中看到的是,我必须将每个类指定为 SootClass,将每个方法指定为 SootMethod。还是我走错了路?
    • 是的,您似乎误会了。 Soot 自动将类转换为 SootClasses。请在 Github 上查看 Wiki 中的教程。
    • 我按照 Github 上 Wiki 中的教程进行操作。首先,我尝试按照 github.com/Sable/soot/wiki/… 的说明在命令行上运行 Soot。值得一提的是,我在 Win7 上运行 Soot。当我输入给定的命令java -cp soot-2.5.0.jar soot.Main -cp . -process-dir ..\MyProject 时,我得到一个Error loading java.util.regex.Pattern。但是,如果我将它与-pp 一起使用,那么我会得到Could not load classfile: java.io.ObjectInputStream,不幸的是我找不到解决问题的方法。
    • 另外,如果我能解决这个问题,我打算通过dump-cfg
    • 我认为最好将讨论移至 Soot 的邮件列表。在那里,您将能够在此类问题上更快地获得帮助。 (事实上​​,浏览档案可能会回答您的许多问题)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-19
    • 2019-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多