public soot.PackManager soot_PackManager() { if (instance_soot_PackManager == null) { synchronized (this) { if (instance_soot_PackManager == null) instance_soot_PackManager = new soot.PackManager(g); } } return instance_soot_PackManager; } protected void release_soot_PackManager() {
protected String getPhaseUsage() { StringBuffer b = new StringBuffer(); b.append("\nPhases and phase options:\n"); for (Pack p : PackManager.v().allPacks()) { b.append(padOpt(p.getPhaseName(), p.getDeclaredOptions())); for (Iterator<Transform> phIt = p.iterator(); phIt.hasNext();) { final HasPhaseOptions ph = (HasPhaseOptions) phIt.next(); b.append(padVal(ph.getPhaseName(), ph.getDeclaredOptions())); } } return b.toString(); }
/** * Gets the baf body for the given SootMethod. This method will first check whether the method already has a baf body. If * not, it will query the local cache. If this fails as well, it will construct a new baf body. * * @param method * The method for which to obtain a baf body * @return The baf body for the given method */ protected BafBody getBafBody(SootMethod method) { final Body activeBody = method.getActiveBody(); if (activeBody instanceof BafBody) { return (BafBody) activeBody; } BafBody body = bafBodyCache.get(method); if (body != null) { return body; } if (activeBody instanceof JimpleBody) { body = PackManager.v().convertJimpleBodyToBaf(method); } else { throw new RuntimeException("ASM-backend can only translate Baf- and JimpleBodies!"); } bafBodyCache.put(method, body); return body; }
PackManager.v().getTransform("jj.ls").apply(b); PackManager.v().getTransform("jj.a").apply(b); PackManager.v().getTransform("jj.ule").apply(b); PackManager.v().getTransform("jj.ne").apply(b); PackManager.v().getTransform("jj.tr").apply(b); PackManager.v().getTransform("jj.ulp").apply(b); PackManager.v().getTransform("jj.lns").apply(b); PackManager.v().getTransform("jj.cp").apply(b); PackManager.v().getTransform("jj.dae").apply(b); PackManager.v().getTransform("jj.cp-ule").apply(b); PackManager.v().getTransform("jj.lp").apply(b); PackManager.v().getTransform("jj.uce").apply(b);
PackManager.v().getPack("stp").apply(sBody); PackManager.v().getPack("sop").apply(sBody); DeadAssignmentEliminator.v().transform(body); UnusedLocalEliminator.v().transform(body); PackManager.v().getPack("jtp").apply(body); if (Options.v().validate()) { body.validate(); PackManager.v().getPack("jop").apply(body); PackManager.v().getPack("jap").apply(body); if (Options.v().xml_attributes() && Options.v().output_format() != Options.output_format_jimple) { PackManager.v().getPack("gop").apply(m.getActiveBody()); } else if (produceBaf) { m.setActiveBody(convertJimpleBodyToBaf(m)); processXMLForClass(c, tc);
public void warnNonexistentPhase() { if (!PackManager.v().hasPhase("jb")) G.v().out.println("Warning: Options exist for non-existent phase jb"); if (!PackManager.v().hasPhase("jb.dtr")) G.v().out.println("Warning: Options exist for non-existent phase jb.dtr"); if (!PackManager.v().hasPhase("jb.ese")) G.v().out.println("Warning: Options exist for non-existent phase jb.ese"); if (!PackManager.v().hasPhase("jb.ls")) G.v().out.println("Warning: Options exist for non-existent phase jb.ls"); if (!PackManager.v().hasPhase("jb.a")) G.v().out.println("Warning: Options exist for non-existent phase jb.a"); if (!PackManager.v().hasPhase("jb.ule")) G.v().out.println("Warning: Options exist for non-existent phase jb.ule"); if (!PackManager.v().hasPhase("jb.tr")) G.v().out.println("Warning: Options exist for non-existent phase jb.tr"); if (!PackManager.v().hasPhase("jb.ulp")) G.v().out.println("Warning: Options exist for non-existent phase jb.ulp"); if (!PackManager.v().hasPhase("jb.lns")) G.v().out.println("Warning: Options exist for non-existent phase jb.lns"); if (!PackManager.v().hasPhase("jb.cp")) G.v().out.println("Warning: Options exist for non-existent phase jb.cp"); if (!PackManager.v().hasPhase("jb.dae")) G.v().out.println("Warning: Options exist for non-existent phase jb.dae"); if (!PackManager.v().hasPhase("jb.cp-ule")) G.v().out.println("Warning: Options exist for non-existent phase jb.cp-ule"); if (!PackManager.v().hasPhase("jb.lp")) G.v().out.println("Warning: Options exist for non-existent phase jb.lp"); if (!PackManager.v().hasPhase("jb.ne")) G.v().out.println("Warning: Options exist for non-existent phase jb.ne"); if (!PackManager.v().hasPhase("jb.uce"))
PackManager.v().runPacks(); if (!Options.v().oaat()) { PackManager.v().writeOutput();
runWholeProgramPacks(); retrieveAllBodies(); coffiMetrics(); System.exit(0); preProcessDAVA(); if (Options.v().interactive_mode()) { if (InteractionHandler.v().getInteractionListener() == null) { runBodyPacks(); handleInnerClasses();
PackManager getPM() { if (pm == null) { PackManager.v(); } return pm; }
public Transform getTransform(String phaseName) { return (Transform) getPhase(phaseName); }
setupJAR(); for (String path : Options.v().process_dir()) { runBodyPacks(clazz); writeClass(clazz); releaseBodies(clazz); tearDownJAR(); handleInnerClasses();
if (PackManager.v().onlyStandardPacks()) { for (Pack pack : PackManager.v().allPacks()) { Options.v().warnForeignPhase(pack.getPhaseName()); for (Transform tr : pack) {
public void runPacks() { if (Options.v().src_prec() == Options.src_prec_class && Options.v().keep_line_number()){ LineNumberAdder lineNumAdder = LineNumberAdder.v(); lineNumAdder.internalTransform("", null); } retrieveAllBodies(); if (Options.v().interactive_mode()){ if (InteractionHandler.v().getInteractionListener() == null){ G.v().out.println("Cannot run in interactive mode. No listeners available. Continuing in regular mode."); Options.v().set_interactive_mode(false); } else { G.v().out.println("Running in interactive mode."); } } runBodyPacks(); handleInnerClasses(); }
private ZipOutputStream getZipOutputStream() throws IOException { if (Options.v().output_jar()) { LOGGER.info("Writing JAR to \"{}\"", Options.v().output_dir()); return PackManager.v().getJarFile(); } final String name = originalApk == null ? "out.apk" : originalApk.getName(); if (originalApk == null) { LOGGER.warn("Setting output file name to \"{}\" as original APK has not been found.", name); } final Path outputFile = Paths.get(SourceLocator.v().getOutputDir(), name); if (Files.exists(outputFile, LinkOption.NOFOLLOW_LINKS)) { if (!Options.v().force_overwrite()) { throw new CompilationDeathException("Output file \"" + outputFile + "\" exists. Not overwriting."); } try { Files.delete(outputFile); } catch (IOException exception) { throw new IllegalStateException("Removing \"" + outputFile + "\" failed. Not writing out anything.", exception); } } LOGGER.info("Writing APK to \"{}\".", outputFile); return new ZipOutputStream(Files.newOutputStream(outputFile, StandardOpenOption.CREATE_NEW)); }
PackManager.v().writeOutput(); } catch (Exception ex) { StringWriter stacktrace = new StringWriter();
private void runWholeProgramPacks() { if (Options.v().whole_shimple()) { ShimpleTransformer.v().transform(); getPack("wspp").apply(); getPack("cg").apply(); getPack("wstp").apply(); getPack("wsop").apply(); } else { getPack("wjpp").apply(); getPack("cg").apply(); getPack("wjtp").apply(); getPack("wjop").apply(); getPack("wjap").apply(); } PaddleHook.v().finishPhases(); }
private void resetRadioPack(String phaseName) { for (Pack p : getPM().allPacks()) { if (!(p instanceof RadioScenePack)) { continue; } if (p.get(phaseName) == null) { continue; } for (Iterator<Transform> tIt = p.iterator(); tIt.hasNext();) { final Transform t = (Transform) tIt.next(); setPhaseOption(t.getPhaseName(), "enabled:false"); } } }