soot.main.main (...)을 호출하지 않고 그을음 분석을 사용할 수 있습니까?

StackOverflow https://stackoverflow.com//questions/12703500

문제

나는 그을음 자바 프로그램의 정적 분석을 수행하도록 예를 들어,제어 흐름 그래프.

다양한 자습서 그을음을 사용하는 "표준 방법"이사용자 정의 변환을 그을음 파이프 라인 다음 soot.main.main (...) :

public static void main(String[] args) {        
    PackManager.v().getPack("jtp").add(
         new Transform("jtp.gotoinstrumenter", GotoInstrumenter.v()));
    soot.Main.main(args);
}
.

물론 명령 줄 도구보다 다른 수영장을 사용하려면 이렇게하면 심각한 제한이 있습니다.예를 들어, 프로그램에서 Soot의 주요 방법을 한 번 이상 콜을 위해 합법적인지 여부는 불분명합니다.

누구도 조금 더 정교한 API를 통해 그을음 분석 도구를 직접 사용할 수있는 가능성을 알고 있습니까?

도움이 되었습니까?

해결책

대답은 예입니다.귀하의 주요에서 귀하가 작업하는 클래스를 설정할 수 있습니다 :

configure("../yourClasspath/");
SootClass sootClass = Scene.v().loadClassAndSupport("className");
sootClass.setApplicationClass();

// Retrieve the method and its body
SootMethod m = c.getMethodByName("methodName");
Body b = m.retrieveActiveBody();

// Instruments bytecode
new YourTransform().transform(b);
.

다음에 CFG를 만들고 일부 분석을 실행할 수 있습니다.

구성 방법은 다음과 같습니다.

public static void configure(String classpath) {

        Options.v().set_verbose(false);
        Options.v().set_keep_line_number(true);
        Options.v().set_src_prec(Options.src_prec_class);
        Options.v().set_soot_classpath(classpath);
        Options.v().set_prepend_classpath(true);

        PhaseOptions.v().setPhaseOption("bb", "off");
        PhaseOptions.v().setPhaseOption("tag.ln", "on");
        PhaseOptions.v().setPhaseOption("jj.a", "on");
        PhaseOptions.v().setPhaseOption("jj.ule", "on");

        Options.v().set_whole_program(true);
    }
.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top