2016-06-23 15 views
0

콜 그래프에서 빌드 할 때 어떻게 사용합니까? 아니면 이것에 대한 더 좋은 프로그램이 있습니까? 답변을 찾고있는 동일한 5 페이지로 보내졌으며 찾고있는 것을 찾을 수 없습니다. Eclipse에 대한 플러그인 버전에도 문제가 있습니다. 그것은 올바른 설치되어 있지만 내가 코드를 실행하려면 그것을 선택할 수 없습니다.그루브에서 콜 그래프

답변

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