/** * @param args */ public static void main(String[] args) { PackManager.v().getPack("jtp").add(new Transform("jtp.fixedie", new BodyTransformer() { @Override protected void internalTransform(Body b, String phaseName, Map<String, String> options) { for (Unit u : b.getUnits()) { Stmt s = (Stmt) u; if (s.containsInvokeExpr()) { InvokeExpr ie = s.getInvokeExpr(); if (FixedMethods.isFixed(ie)) { System.err.println("+++ " + ie); yes++; } else { System.err.println(" - " + ie); no++; } } } } })); soot.Main.main(args); System.err.println("+++ " + yes); System.err.println(" - " + no); }
/** * @param args */ public static void main(String[] args) { PackManager.v().getPack("wjtp").add(new Transform("wjtp.ifds", new SceneTransformer() { protected void internalTransform(String phaseName, @SuppressWarnings("rawtypes") Map options) { IFDSTabulationProblem<Unit, ?, SootMethod, InterproceduralCFG<Unit, SootMethod>> problem = new IFDSPossibleTypes(new JimpleBasedInterproceduralCFG()); @SuppressWarnings({ "rawtypes", "unchecked" }) JimpleIFDSSolver<?, InterproceduralCFG<Unit, SootMethod>> solver = new JimpleIFDSSolver(problem); solver.solve(); } })); soot.Main.main(args); }
private void registerGuard(SootMethod container, Stmt stmt, String string) { guards.add(new Guard(container, stmt, string)); if (options.verbose()) { logger.debug("Incomplete trace file: Class.forName() is called in method '" + container + "' but trace contains no information about the receiver class of this call."); if (options.guards().equals("ignore")) { logger.debug("Guarding strategy is set to 'ignore'. Will ignore this problem."); } else if (options.guards().equals("print")) { logger.debug("Guarding strategy is set to 'print'. " + "Program will print a stack trace if this location is reached during execution."); } else if (options.guards().equals("throw")) { logger.debug("Guarding strategy is set to 'throw'. Program will throw an " + "Error if this location is reached during execution."); } else { throw new RuntimeException("Invalid value for phase option (guarding): " + options.guards()); } } if (!registeredTransformation) { registeredTransformation = true; PackManager.v().getPack("wjap").add(new Transform("wjap.guards", new SceneTransformer() { @Override protected void internalTransform(String phaseName, Map<String, String> options) { for (Guard g : guards) { insertGuard(g); } } })); PhaseOptions.v().setPhaseOption("wjap.guards", "enabled"); } }
public static void main(String[] args) { PackManager.v().getPack("wjpp").add(new Transform("wjpp.inlineReflCalls", new ReflectiveCallsInliner())); Scene.v().addBasicClass(Object.class.getName()); Scene.v().addBasicClass(SootSig.class.getName(), SootClass.BODIES);
wjtp.add(new Transform("wjtp.jbco_fr", newTransform((Transformer) getTransform("wjtp.jbco_fr")))); if (transformsToAdd.remove("wjtp.jbco_fr")) { FieldRenamer.v().setRenameFields(true); wjtp.add(new Transform("wjtp.jbco_cc", newTransform((Transformer) getTransform("wjtp.jbco_cc")))); if (transformsToAdd.get(i).startsWith("bb")) { jl = "jtp.jbco_jl"; jtp.add(new Transform(jl, newTransform((Transformer) getTransform(jl)))); bb.insertBefore(new Transform("bb.jbco_j2bl", newTransform((Transformer) getTransform("bb.jbco_j2bl"))), "bb.lso"); bb.insertBefore(new Transform("bb.jbco_ful", newTransform((Transformer) getTransform("bb.jbco_ful"))), "bb.lso"); bb.add(new Transform("bb.jbco_rrps", newTransform((Transformer) getTransform("bb.jbco_rrps")))); String insertBefore = p == jtp ? jl : p == bb ? "bb.jbco_ful" : null; if (insertBefore != null) { p.insertBefore(new Transform(tname, newTransform((Transformer) t)), insertBefore); } else { p.add(new Transform(tname, newTransform((Transformer) t))); bb.add(new Transform("bb.jbco_bln", new BafLineNumberer())); bb.add(new Transform("bb.jbco_lta", soot.tagkit.LineNumberTagAggregator.v())); } else { argv = checkWhole(argv, false);
public static void main(String[] argv) { // if you do not want soot to output new class files, run with comman line option "-f n" // if you want the source code line numbers for jimple statements, use this: PackManager.v().getPack("jtp").add(new Transform("jtp.lnprinter", new LineNumberGenerator().bln)); // if you want the source code line numbers for baf instructions, use this: PackManager.v().getPack("bb").add(new Transform("bb.lnprinter", new LineNumberGenerator().bln)); soot.Main.main(argv); }
/** * @param args */ public static void main(String[] args) { PackManager.v().getPack("wjtp").add(new Transform("wjtp.narm", new DumpNumAppReachableMethods())); soot.Main.main(args); }
public static void main(String[] args) { PackManager.v().getPack("cg").add(new Transform("cg.badfields", new BadFields())); soot.Main.main(args); }
p.add(new Transform("jb.tt", TrapTightener.v())); p.add(new Transform("jb.dtr", DuplicateCatchAllTrapRemover.v())); p.add(new Transform("jb.ese", EmptySwitchEliminator.v())); p.add(new Transform("jb.ls", LocalSplitter.v())); p.add(new Transform("jb.a", Aggregator.v())); p.add(new Transform("jb.ule", UnusedLocalEliminator.v())); p.add(new Transform("jb.tr", TypeAssigner.v())); p.add(new Transform("jb.ulp", LocalPacker.v())); p.add(new Transform("jb.lns", LocalNameStandardizer.v())); p.add(new Transform("jb.cp", CopyPropagator.v())); p.add(new Transform("jb.dae", DeadAssignmentEliminator.v())); p.add(new Transform("jb.cp-ule", UnusedLocalEliminator.v())); p.add(new Transform("jb.lp", LocalPacker.v())); p.add(new Transform("jb.ne", NopEliminator.v())); p.add(new Transform("jb.uce", UnreachableCodeEliminator.v())); p.add(new Transform("jj.ls", LocalSplitter.v())); p.add(new Transform("jj.a", Aggregator.v())); p.add(new Transform("jj.ule", UnusedLocalEliminator.v())); p.add(new Transform("jj.ne", NopEliminator.v())); p.add(new Transform("jj.tr", TypeAssigner.v())); p.add(new Transform("jj.ulp", LocalPacker.v())); p.add(new Transform("jj.lns", LocalNameStandardizer.v())); p.add(new Transform("jj.cp", CopyPropagator.v())); p.add(new Transform("jj.dae", DeadAssignmentEliminator.v())); p.add(new Transform("jj.cp-ule", UnusedLocalEliminator.v())); p.add(new Transform("jj.lp", LocalPacker.v())); p.add(new Transform("jj.uce", UnreachableCodeEliminator.v()));
public static void main(String[] args) { PackManager.v().getPack("wjtp").add(new Transform("wjtp.onflyicfg", new SceneTransformer() {
public static void main(String[] args) { CFGViewer viewer = new CFGViewer(); Transform printTransform = new Transform(phaseFullname, viewer); printTransform.setDeclaredOptions("enabled " + altClassPathOptionName + ' ' + graphTypeOptionName + ' ' + irOptionName + ' ' + multipageOptionName + ' ' + briefLabelOptionName + ' '); printTransform.setDefaultOptions( "enabled " + altClassPathOptionName + ": " + graphTypeOptionName + ':' + defaultGraph + ' ' + irOptionName + ':' + defaultIR + ' ' + multipageOptionName + ":false " + ' ' + briefLabelOptionName + ":false "); PackManager.v().getPack("jtp").add(printTransform); args = viewer.parse_options(args); if (args.length == 0) { usage(); } else { soot.Main.main(args); } }
/** * Loads the phase plugin and adds it to PackManager. * * @param pluginDescription * the plugin description instance read from configuration file. */ private static void handlePhasePlugin(final PhasePluginDescription pluginDescription) { try { final Object instance = PluginLoader.loadStrategy.create(pluginDescription.getClassName()); if (!(instance instanceof SootPhasePlugin)) { throw new RuntimeException( "The plugin class '" + pluginDescription.getClassName() + "' does not implement SootPhasePlugin."); } final SootPhasePlugin phasePlugin = (SootPhasePlugin) instance; phasePlugin.setDescription(pluginDescription); final String packName = getPackName(pluginDescription.getPhaseName()); Transform transform = new Transform(pluginDescription.getPhaseName(), phasePlugin.getTransformer()); transform.setDeclaredOptions(concat(appendEnabled(phasePlugin.getDeclaredOptions()))); transform.setDefaultOptions(concat(phasePlugin.getDefaultOptions())); PackManager.v().getPack(packName).add(transform); } catch (final ClassNotFoundException e) { throw new RuntimeException("Failed to load plugin class for " + pluginDescription + ".", e); } catch (final InstantiationException e) { throw new RuntimeException("Failed to instanciate plugin class for " + pluginDescription + ".", e); } }
/** * Parses all layout XML files in the given APK file and loads the IDs of the * user controls in it. This method only registers a Soot phase that is run when * the Soot packs are next run * * @param fileName * The APK file in which to look for user controls */ public void parseLayoutFile(final String fileName) { Transform transform = new Transform("wjtp.lfp", new SceneTransformer() { @Override protected void internalTransform(String phaseName, @SuppressWarnings("rawtypes") Map options) { parseLayoutFileDirect(fileName); } }); PackManager.v().getPack("wjtp").add(transform); }
p.add(new Transform("jb.tt", soot.toolkits.exceptions.TrapTightener.v())); p.add(new Transform("jb.ls", LocalSplitter.v())); p.add(new Transform("jb.a", Aggregator.v())); p.add(new Transform("jb.ule", UnusedLocalEliminator.v())); p.add(new Transform("jb.tr", TypeAssigner.v())); p.add(new Transform("jb.ulp", LocalPacker.v())); p.add(new Transform("jb.lns", LocalNameStandardizer.v())); p.add(new Transform("jb.cp", CopyPropagator.v())); p.add(new Transform("jb.dae", DeadAssignmentEliminator.v())); p.add(new Transform("jb.cp-ule", UnusedLocalEliminator.v())); p.add(new Transform("jb.lp", LocalPacker.v())); p.add(new Transform("jb.ne", NopEliminator.v())); p.add(new Transform("jb.uce", UnreachableCodeEliminator.v())); p.add(new Transform("jop.cse", CommonSubexpressionEliminator.v())); p.add(new Transform("jop.bcm", BusyCodeMotion.v())); p.add(new Transform("jop.lcm", LazyCodeMotion.v())); p.add(new Transform("jop.cp", CopyPropagator.v())); p.add(new Transform("jop.cpf", ConstantPropagatorAndFolder.v())); p.add(new Transform("jop.cbf", ConditionalBranchFolder.v())); p.add(new Transform("jop.dae", DeadAssignmentEliminator.v())); p.add(new Transform("jop.nce", new NullCheckEliminator())); p.add(new Transform("jop.uce1", UnreachableCodeEliminator.v())); p.add(new Transform("jop.ubf1", UnconditionalBranchFolder.v())); p.add(new Transform("jop.uce2", UnreachableCodeEliminator.v())); p.add(new Transform("jop.ubf2", UnconditionalBranchFolder.v())); p.add(new Transform("jop.ule", UnusedLocalEliminator.v())); p.add(new Transform("jap.npc", NullPointerChecker.v()));
p.add(new Transform("jb.tt", soot.toolkits.exceptions.TrapTightener.v())); p.add(new Transform("jb.ls", LocalSplitter.v())); p.add(new Transform("jb.a", Aggregator.v())); p.add(new Transform("jb.ule", UnusedLocalEliminator.v())); p.add(new Transform("jb.tr", TypeAssigner.v())); p.add(new Transform("jb.ulp", LocalPacker.v())); p.add(new Transform("jb.lns", LocalNameStandardizer.v())); p.add(new Transform("jb.cp", CopyPropagator.v())); p.add(new Transform("jb.dae", DeadAssignmentEliminator.v())); p.add(new Transform("jb.cp-ule", UnusedLocalEliminator.v())); p.add(new Transform("jb.lp", LocalPacker.v())); p.add(new Transform("jb.ne", NopEliminator.v())); p.add(new Transform("jb.uce", UnreachableCodeEliminator.v())); p.add(new Transform("jop.cse", CommonSubexpressionEliminator.v())); p.add(new Transform("jop.bcm", BusyCodeMotion.v())); p.add(new Transform("jop.lcm", LazyCodeMotion.v())); p.add(new Transform("jop.cp", CopyPropagator.v())); p.add(new Transform("jop.cpf", ConstantPropagatorAndFolder.v())); p.add(new Transform("jop.cbf", ConditionalBranchFolder.v())); p.add(new Transform("jop.dae", DeadAssignmentEliminator.v())); p.add(new Transform("jop.nce", new NullCheckEliminator())); p.add(new Transform("jop.uce1", UnreachableCodeEliminator.v())); p.add(new Transform("jop.ubf1", UnconditionalBranchFolder.v())); p.add(new Transform("jop.uce2", UnreachableCodeEliminator.v())); p.add(new Transform("jop.ubf2", UnconditionalBranchFolder.v())); p.add(new Transform("jop.ule", UnusedLocalEliminator.v())); p.add(new Transform("jap.npc", NullPointerChecker.v()));
PackManager.v().getPack("wjap").add(new Transform("wjap.guards",new SceneTransformer() {
PackManager.v().getPack("wjap").add(new Transform("wjap.guards",new SceneTransformer() {
new Transform(pack + ".ifds", new PropagationSceneTransformer(resultBuilder, new PropagationSceneTransformerFilePrinter(debugFilename, new SymbolFilter() { @Override
super.collectCallbackMethods(); Transform transform = new Transform("wjtp.ajc", new SceneTransformer() { @Override protected void internalTransform(String phaseName, @SuppressWarnings("rawtypes") Map options) {