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