2016-06-23 9 views
0

コールグラフでSOOTを使用してビルドするにはどうすればよいですか?それともこれ以上のプログラムがありますか?私は答えを探している同じ5ページの周りに送られて、私が探しているものを見つけることができません。 Eclipseへのプラグインのバージョンにも問題があります。それは正しくインストールされているが、私はコードを実行するときにそれを選択することはできません。Sootのコールグラフ

答えて

0

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); 
    } 
    } 
} 
0

小変更

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); 
 
    } 
 
}

関連する問題