Pregunta

Quiero usar SOOT Para hacer un análisis estático de los programas Java, incluso por ejemploEl gráfico de flujo de control.

Los distintos tutoriales dicen que la "manera estándar" para usar el hollín esCree un método principal donde uno agregue transformaciones personalizadas a la tubería de hollín y luego llame a hollin.main.main (...) :

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

Por supuesto, esto tiene algunas limitaciones serias si desea utilizar HOOT en algo más que una herramienta de línea de comandos.Por ejemplo, no le está claro si incluso es legal llamar al método principal de SOOT más de una vez en un programa.

¿Alguien sabe una posibilidad de usar las herramientas de análisis de hollín directamente a través de una API que es un poco más sofisticada?

¿Fue útil?

Solución

La respuesta es sí.En su principal, puede configurar la clase con la que trabaja:

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

Después de eso, podría construir el CFG y ejecutar algún análisis.

Sigue el método de configuración:

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top