【问题标题】:Call graphs in SootSoot 中的调用图
【发布时间】:2016-06-23 13:39:59
【问题描述】:

如何使用 SOOT 构建调用图?或者有没有更好的程序呢?我被发送了大约相同的五页来寻找答案,但我找不到我要找的东西。 Eclipse的插件版本也有问题。它安装正确,但是当我想运行代码时无法选择它。

【问题讨论】:

    标签: java eclipse call-graph soot


    【解决方案1】:

    对上一个答案的小修改

    private static void visit(CallGraph cg, SootMethod method) {
      String identifier = method.getSignature();
      visited.put(method.getSignature(), true);
      dot.drawNode(identifier);
      // iterate over unvisited parents
      Iterator<MethodOrMethodContext> ptargets = new Sources(cg.edgesInto(method));
      if (ptargets != null) {
        while (ptargets.hasNext()) {
            SootMethod parent = (SootMethod) ptargets.next();
            if (!visited.containsKey(parent.getSignature())) visit(cg, parent);
        }
    }

    【讨论】:

      【解决方案2】:

      这里有一些例子,包括 Java 的调用图。 http://www.brics.dk/SootGuide/

      并为 apk 调用图表。 https://github.com/secure-software-engineering/soot-infoflow/issues/38

      如果你想获取点文件,你可以像这样遍历调用图并以点格式写出内容。

      private static void visit(CallGraph cg, SootMethod method) {
        String identifier = method.getSignature();
        visited.put(method.getSignature(), true);
        dot.drawNode(identifier);
        // iterate over unvisited parents
        Iterator<MethodOrMethodContext> ptargets = new Targets(cg.edgesInto(method));
        if (ptargets != null) {
          while (ptargets.hasNext()) {
              SootMethod parent = (SootMethod) ptargets.next();
              if (!visited.containsKey(parent.getSignature())) visit(cg, parent);
          }
        }
          // iterate over unvisited children
          Iterator<MethodOrMethodContext> ctargets = new Targets(cg.edgesOutOf(method));
        if (ctargets != null) {
          while (ctargets.hasNext()) {
             SootMethod child = (SootMethod) ctargets.next();
             dot.drawEdge(identifier, child.getSignature());
             System.out.println(method + " may call " + child);
             if (!visited.containsKey(child.getSignature())) visit(cg, child);
          }
        }
      }
      

      【讨论】:

        猜你喜欢
        • 2020-05-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多