private static void runComputeModule( final String binDir, final Config cfg, final String outputDir) throws IOException, IllegalArgumentException, CancelException, PDGFormatException, WalaException { Main.checkOrCreateOutputDir(outputDir); System.out.print("Setting up analysis scope... "); // Fuegt die normale Java Bibliothek zum Scope hinzu AnalysisScope scope = AnalysisScopeReader.makePrimordialScope(null); if (cfg.nativesXML != null) { com.ibm.wala.ipa.callgraph.impl.Util.setNativeSpec(cfg.nativesXML); } // if use stubs if (cfg.stubs != null) { scope.addToScope(ClassLoaderReference.Primordial, new JarFile(cfg.stubs)); } // Nimmt unnoetige Klassen raus SetOfClasses exclusions = new FileOfClasses(new ByteArrayInputStream(cfg.exclusions.getBytes())); scope.setExclusions(exclusions); ClassLoaderReference loader = scope.getLoader(AnalysisScope.APPLICATION); AnalysisScopeReader.addClassPathToScope(binDir, scope, loader); System.out.println("done."); ClassHierarchy cha = ClassHierarchy.make(scope); System.out.print("Creating MoJo... "); MoJo mojo = MoJo.create(cha); System.out.println("done."); for (IClass cls : cha) { for (IMethod im : cls.getDeclaredMethods()) { if (im.getDeclaringClass().isInterface() || im.isAbstract()) { // skip methods without a body continue; } MethodInfo nfo = cfg.extern.checkForModuleMethod(im); if (nfo != null) { System.out.println("Found " + nfo + " for " + im); final String sig = Dictionary.extractSignature(im); final String outputMethodDir = outputDir + (outputDir.endsWith(File.separator) ? "" : File.separator) + "m_" + sig; Main.checkOrCreateOutputDir(outputMethodDir); computeVariants(mojo, im, nfo, outputMethodDir); } } } }
public AnalysisScope toAnalysisScope() throws IOException { AnalysisScope analysisScope = AnalysisScope.createJavaAnalysisScope(); analysisScope.setExclusions(exclusions); for (String moduleLine : moduleLinesList) { AnalysisScopeReader.processScopeDefLine( analysisScope, this.getClass().getClassLoader(), moduleLine); } for (String ldrLine : ldrImplLinesList) { AnalysisScopeReader.processScopeDefLine( analysisScope, this.getClass().getClassLoader(), ldrLine); } return analysisScope; }
public static Process run(String[] args) throws IOException { try { validateCommandLine(args); String classpath = args[CLASSPATH_INDEX]; AnalysisScope scope = AnalysisScopeReader.makeJavaBinaryAnalysisScope( classpath, (new FileProvider()).getFile(CallGraphTestUtil.REGRESSION_EXCLUSIONS)); // invoke WALA to build a class hierarchy ClassHierarchy cha = ClassHierarchy.make(scope); Graph<IClass> g = typeHierarchy2Graph(cha); g = pruneForAppLoader(g); String dotFile = p.getProperty(WalaProperties.OUTPUT_DIR) + File.separatorChar + DOT_FILE; String pdfFile = p.getProperty(WalaProperties.OUTPUT_DIR) + File.separatorChar + PDF_FILE; String dotExe = p.getProperty(WalaExamplesProperties.DOT_EXE); String gvExe = p.getProperty(WalaExamplesProperties.PDFVIEW_EXE); DotUtil.dotify(g, null, dotFile, pdfFile, dotExe); return PDFViewUtil.launchPDFView(pdfFile, gvExe); } catch (WalaException e) { // TODO Auto-generated catch block e.printStackTrace(); return null; } }
public static ExceptionPruneAnalysis createBarcodeTest() throws WalaException, IOException, IllegalArgumentException, CallGraphBuilderCancelException { com.ibm.wala.ipa.callgraph.impl.Util.setNativeSpec("test_lib/natives_empty.xml"); AnalysisScope scope = AnalysisScopeReader.makePrimordialScope(null); SetOfClasses exclusions = new FileOfClasses(new ByteArrayInputStream("com/sun/.*".getBytes())); scope.setExclusions(exclusions); ClassLoaderReference primordial = scope.getLoader(AnalysisScope.PRIMORDIAL); AnalysisScopeReader.addClassPathToScope("test_lib/jSDG-stubs-j2me2.0.jar", scope, primordial); AnalysisScopeReader.addClassPathToScope("test_lib/primordial.jar", scope, primordial); ClassLoaderReference loader = scope.getLoader(AnalysisScope.APPLICATION); AnalysisScopeReader.addClassPathToScope(classPath, scope, loader); // Klassenhierarchie berechnen System.out.println("Creating class hierarchy..."); ClassHierarchy cha = ClassHierarchy.make(scope); System.out.println("Done."); AnalysisCache cache = new AnalysisCache(); Iterable<Entrypoint> entries = Util.makeMainEntrypoints(scope, cha, "LMainEmulator"); // MethodReference mr = StringStuff.makeMethodReference(Language.JAVA, methodSig); // IMethod m = cha.resolveMethod(mr); if (entries == null || !entries.iterator().hasNext()) { throw new IllegalStateException("Could not find main method in MainEmulator"); } // Set<Entrypoint> entries = HashSetFactory.make(); // entries.add(new DefaultEntrypoint(m, cha)); AnalysisOptions options = new AnalysisOptions(); options.getSSAOptions().setPiNodePolicy(SSAOptions.getAllBuiltInPiNodes()); options.setEntrypoints(entries); CallGraphBuilder builder = Util.makeZeroCFABuilder(options, cache, cha, scope); System.out.println("Creating call graph..."); CallGraph cg = builder.makeCallGraph(options, null); System.out.println("Done."); PointerAnalysis pta = builder.getPointerAnalysis(); ExceptionPruneAnalysis mCFG = new ExceptionPruneAnalysis(cg, pta, cache); return mCFG; }
@BeforeClass public static void before() throws IOException, ClassHierarchyException { AnalysisScope scope = AnalysisScopeReader.readJavaScope( TestConstants.WALA_TESTDATA, (new FileProvider()).getFile(CallGraphTestUtil.REGRESSION_EXCLUSIONS), AnnotationTest.class.getClassLoader()); cha = ClassHierarchy.make(scope); }
public static ExceptionPruneAnalysis create(String methodSig) throws WalaException, IOException, IllegalArgumentException, CallGraphBuilderCancelException { AnalysisScope scope = AnalysisScopeReader.makePrimordialScope(null); SetOfClasses exclusions = new FileOfClasses(new ByteArrayInputStream(exclusionRegExp.getBytes())); scope.setExclusions(exclusions); ClassLoaderReference loader = scope.getLoader(AnalysisScope.APPLICATION); AnalysisScopeReader.addClassPathToScope(classPath, scope, loader); // Klassenhierarchie berechnen ClassHierarchy cha = ClassHierarchy.make(scope); AnalysisCache cache = new AnalysisCache(); MethodReference mr = StringStuff.makeMethodReference(Language.JAVA, methodSig); IMethod m = cha.resolveMethod(mr); if (m == null) { throw new IllegalStateException("Could not resolve " + mr); } Set<Entrypoint> entries = HashSetFactory.make(); entries.add(new DefaultEntrypoint(m, cha)); AnalysisOptions options = new AnalysisOptions(); options.getSSAOptions().setPiNodePolicy(SSAOptions.getAllBuiltInPiNodes()); options.setEntrypoints(entries); CallGraphBuilder builder = Util.makeZeroOneContainerCFABuilder(options, cache, cha, scope); CallGraph cg = builder.makeCallGraph(options, null); PointerAnalysis pta = builder.getPointerAnalysis(); ExceptionPruneAnalysis mCFG = new ExceptionPruneAnalysis(cg, pta, cache); return mCFG; }