diff --git a/soot-infoflow-summaries/src/soot/jimple/infoflow/methodSummary/DefaultSummaryConfig.java b/soot-infoflow-summaries/src/soot/jimple/infoflow/methodSummary/DefaultSummaryConfig.java index 322a86766..db9bcfe35 100644 --- a/soot-infoflow-summaries/src/soot/jimple/infoflow/methodSummary/DefaultSummaryConfig.java +++ b/soot-infoflow-summaries/src/soot/jimple/infoflow/methodSummary/DefaultSummaryConfig.java @@ -40,7 +40,11 @@ public void setSootOptions(Options options, InfoflowConfiguration config) { options.set_no_bodies_for_excluded(true); options.set_allow_phantom_refs(true); options.set_include(includeList); - options.set_output_format(Options.output_format_none); + if (summaryConfig.getWriteOutputFiles()) + options.set_output_format(Options.output_format_jimple); + else + options.set_output_format(Options.output_format_none); + options.setPhaseOption("jb", "use-original-names:true"); options.set_ignore_classpath_errors(true); diff --git a/soot-infoflow-summaries/src/soot/jimple/infoflow/methodSummary/Main.java b/soot-infoflow-summaries/src/soot/jimple/infoflow/methodSummary/Main.java index 045d35367..732900226 100644 --- a/soot-infoflow-summaries/src/soot/jimple/infoflow/methodSummary/Main.java +++ b/soot-infoflow-summaries/src/soot/jimple/infoflow/methodSummary/Main.java @@ -47,6 +47,7 @@ class Main { private static final String OPTION_CLASS_TIMEOUT = "ct"; private static final String OPTION_ANALYZE_HASHCODE_EQUALS = "he"; private static final String OPTION_ANDROID_PLATFORMS = "p"; + private static final String OPTION_WRITE_JIMPLE_FILES = "wj"; public static void main(final String[] args) throws FileNotFoundException, XMLStreamException { Main main = new Main(); @@ -79,6 +80,7 @@ private void initializeCommandLineOptions() { "Also analyze hashCode() and equals() methods"); options.addOption(OPTION_ANDROID_PLATFORMS, "platformsdir", true, "Path to the platforms directory from the Android SDK"); + options.addOption(OPTION_WRITE_JIMPLE_FILES, "writejimplefiles", false, "Write out the Jimple files"); } public void run(final String[] args) throws FileNotFoundException, XMLStreamException { @@ -201,6 +203,11 @@ protected void configureOptionalSettings(CommandLine cmd, SummaryGenerator gener String platformsDir = cmd.getOptionValue(OPTION_ANDROID_PLATFORMS); generator.getConfig().setAndroidPlatformDir(platformsDir); } + { + boolean writeJimpleFiles = cmd.hasOption(OPTION_WRITE_JIMPLE_FILES); + if (writeJimpleFiles) + generator.getConfig().setWriteOutputFiles(true); + } } /** diff --git a/soot-infoflow-summaries/src/soot/jimple/infoflow/methodSummary/generator/SummaryGenerator.java b/soot-infoflow-summaries/src/soot/jimple/infoflow/methodSummary/generator/SummaryGenerator.java index 8cc5670a8..793bda75a 100644 --- a/soot-infoflow-summaries/src/soot/jimple/infoflow/methodSummary/generator/SummaryGenerator.java +++ b/soot-infoflow-summaries/src/soot/jimple/infoflow/methodSummary/generator/SummaryGenerator.java @@ -267,7 +267,10 @@ public ClassSummaries createMethodSummaries(String classpath, Collection } } - Options.v().set_output_format(Options.output_format_none); + if (config.getWriteOutputFiles()) + Options.v().set_output_format(Options.output_format_jimple); + else + Options.v().set_output_format(Options.output_format_none); if (hasWildcard || config.getLoadFullJAR() || config.getSummarizeFullJAR()) Options.v().set_process_dir(Arrays.asList(classpath.split(File.pathSeparator))); else