2017-11-02 1 views
0

나는 Soot의 두 그래프를 비교하려고합니다. 그러나 나는 할 수 없다. "src"및 "dst"라는 두 개의 디렉토리에서 클래스를로드하려고했습니다. 그리고 객체 icfg에는 두 개의 시작점이 있다고 생각했습니다. 하지만 그렇지 않습니다.그을음을 사용하여 두 그래프를 작성하는 방법

그래서 "soot.Main.main"을 두 번 호출하려고했습니다. 하지만 작동하지 않습니다. 두 그래프를 어떻게 만들 수 있습니까? 저에게 알려주세요. 나에게 코드 스 니펫을 줄 수 있니?

public void makeICFG(String src, String dst){  
    PackManager.v().getPack("wjtp").add(
      new Transform("wjtp.myTransform1", new SceneTransformer() { 
       protected void internalTransform(String phaseName, Map options) { 
        System.out.println(); 
        System.out.println(); 

        InterproceduralCFG<Unit, SootMethod> icfg = new JimpleBasedInterproceduralCFG(); 

        SootMethod m = Scene.v().getMainMethod(); 
        //SootMethod m = Scene.v().loadClassAndSupport("targetSrc.HelloWorld").getMethodByName("main"); //when a main doesn't exist 

        Iterator<Unit> it = icfg.getStartPointsOf(m).iterator(); 
        Unit unit = it.next(); 
        System.out.println(unit); 


        DFSTraverseG(icfg, unit); 


        System.out.println(); 
        System.out.println(); 


       } 
      })); 
    soot.Main.main(new String[] { 
      "-cp", "C:\\Users\\soo\\Desktop\\eclipse-java-mars-2-win32-x86_64\\test1\\sootclasses-trunk.jar;" 
        + "C:\\Users\\soo\\Desktop\\eclipse-java-mars-2-win32-x86_64\\test1\\sootclasses-trunk-jar-with-dependencies.jar;" 
        + "C:\\Users\\soo\\Desktop\\eclipse-java-mars-2-win32-x86_64\\TestTarget\\bin;" 
        + "C:\\Users\\soo\\Desktop\\eclipse-java-mars-2-win32-x86_64\\RTSTest\\bin", 
      "-pp", 
      "-process-dir", src, 
      "-process-dir", dst, 
      "-w", 
      "-p", "cg.spark", "verbose:true,apponly:true", 
      "-f", "J" 

    }); 

답변

0

사실 까다 롭습니다. 두 그래프로하려는 것을 설명해 주시겠습니까? 아마 나는 좋은 해결책을 생각할 수 있습니다.

관련 문제