From 34bc18cc52a1472a3981e65c52ac4b37b9ab0171 Mon Sep 17 00:00:00 2001 From: Manu Sridharan Date: Thu, 11 Jul 2024 15:04:17 -0700 Subject: [PATCH] Add driver for building indirection-bounded call graphs --- build.gradle | 3 +- .../drivers/BoundedJSCallGraphDriver.java | 36 +++++++++++++++++++ 2 files changed, 38 insertions(+), 1 deletion(-) create mode 100644 src/main/java/com/ibm/wala/examples/drivers/BoundedJSCallGraphDriver.java diff --git a/build.gradle b/build.gradle index 19efe7a..143a994 100644 --- a/build.gradle +++ b/build.gradle @@ -13,10 +13,11 @@ jar { repositories { mavenCentral() + mavenLocal() } dependencies { - def walaVersion = '1.6.4' + def walaVersion = '1.6.5' implementation "com.ibm.wala:com.ibm.wala.shrike:${walaVersion}" implementation "com.ibm.wala:com.ibm.wala.util:${walaVersion}" diff --git a/src/main/java/com/ibm/wala/examples/drivers/BoundedJSCallGraphDriver.java b/src/main/java/com/ibm/wala/examples/drivers/BoundedJSCallGraphDriver.java new file mode 100644 index 0000000..25d290c --- /dev/null +++ b/src/main/java/com/ibm/wala/examples/drivers/BoundedJSCallGraphDriver.java @@ -0,0 +1,36 @@ +package com.ibm.wala.examples.drivers; + +import com.ibm.wala.cast.js.callgraph.fieldbased.FieldBasedCallGraphBuilder; +import com.ibm.wala.cast.js.translator.CAstRhinoTranslatorFactory; +import com.ibm.wala.cast.js.util.CallGraph2JSON; +import com.ibm.wala.cast.js.util.FieldBasedCGUtil; +import com.ibm.wala.ipa.callgraph.CallGraph; +import com.ibm.wala.ipa.callgraph.CallGraphStats; +import com.ibm.wala.util.CancelException; +import com.ibm.wala.util.NullProgressMonitor; +import com.ibm.wala.util.WalaException; + +import java.io.IOException; +import java.net.URL; +import java.nio.file.Path; +import java.nio.file.Paths; + +public class BoundedJSCallGraphDriver { + + /** + * Driver for building indirection-bounded approximate call graphs. + * + * Usage: BoundedJSCallGraphDriver script_directory bound + */ + public static void main(String[] args) + throws IllegalArgumentException, IOException, CancelException, WalaException { + Path scriptDir = Paths.get(args[0]); + int bound = Integer.parseInt(args[1]); + FieldBasedCGUtil f = new FieldBasedCGUtil(new CAstRhinoTranslatorFactory()); + FieldBasedCallGraphBuilder.CallGraphResult results = + f.buildScriptDirBoundedCG(scriptDir, new NullProgressMonitor(), false, bound); + CallGraph CG = results.getCallGraph(); + System.out.println(CallGraphStats.getStats(CG)); + System.out.println((new CallGraph2JSON()).serialize(CG)); + } +}