jdk\/.*
org\/omg\/.*
org\/w3c\/.*
+java\/text\/.*
+java\/util\/.*
+++ /dev/null
-Soot:\r
-https://github.com/Sable/soot\r
-\r
-WALA:\r
-https://github.com/wala/WALA\r
-\r
-SOBA:\r
-http://scm.osdn.jp/gitroot/soba/soba-core.git
\ No newline at end of file
--- /dev/null
+git clone http://scm.osdn.jp/gitroot/soba/soba-core.git\r
+git clone https://github.com/Sable/soot.git\r
+git clone https://github.com/wala/WALA.git
\ No newline at end of file
public class ClassHierarchyPerformance {\r
\r
public static void main(String[] args) {\r
- args = new String[]{"bin/demo/testdata"};\r
- \r
long start = System.currentTimeMillis();\r
\r
JavaProgram program = new JavaProgram(ClasspathUtil.getClassList(args));\r
ClassHierarchy ch = program.getClassHierarchy();\r
- \r
for (ClassInfo c: program.getClasses()) {\r
for (MethodInfo m: c.getMethods()) {\r
for (CallSite cs: m.getCallSites()) {\r
\r
long end = System.currentTimeMillis();\r
\r
- System.out.println((end - start) + " [ms]");\r
- System.out.println(MemoryInfo.getMemoryInfo());\r
+ System.err.println((end - start) + " [ms]");\r
+ System.err.println(MemoryInfo.getMemoryInfo());\r
}\r
\r
}\r
--- /dev/null
+package demo.soba;\r
+\r
+import soba.core.ClassInfo;\r
+import soba.core.JavaProgram;\r
+import soba.core.MethodInfo;\r
+import soba.core.method.DataDependence;\r
+import soba.core.method.DataFlowEdge;\r
+import soba.util.IntPairProc;\r
+import soba.util.files.ClasspathUtil;\r
+import soba.util.graph.DirectedGraph;\r
+import demo.util.MemoryInfo;\r
+\r
+public class ControlAndDataDependencePerformance {\r
+\r
+ public static void main(String[] args) {\r
+ long start = System.currentTimeMillis();\r
+ \r
+ JavaProgram program = new JavaProgram(ClasspathUtil.getClassList(args));\r
+ for (ClassInfo c: program.getClasses()) {\r
+ for (MethodInfo m: c.getMethods()) {\r
+ DataDependence dd = m.getDataDependence();\r
+ for (DataFlowEdge e: dd.getEdges()) {\r
+// System.out.println(e.getSourceInstruction() + " -> " + e.getDestinationInstruction());\r
+ }\r
+ DirectedGraph cd = m.getControlDependence();\r
+ cd.forEachEdge(new IntPairProc() {\r
+ @Override\r
+ public boolean execute(int elem1, int elem2) {\r
+// System.out.println(elem1 + " -> " + elem2);\r
+ return true;\r
+ }\r
+ });\r
+ }\r
+ }\r
+ \r
+ long end = System.currentTimeMillis();\r
+ \r
+ System.err.println((end - start) + " [ms]");\r
+ System.err.println(MemoryInfo.getMemoryInfo());\r
+ }\r
+\r
+}\r
--- /dev/null
+package demo.soba;\r
+\r
+import soba.core.ClassInfo;\r
+import soba.core.JavaProgram;\r
+import soba.util.files.ClasspathUtil;\r
+\r
+public class DumpAnalysisClass {\r
+\r
+ public static void main(String[] args) {\r
+ JavaProgram program = new JavaProgram(ClasspathUtil.getClassList(args));\r
+ program.getClasses().stream()\r
+ .map(ClassInfo::getClassName)\r
+ .map(className -> className.replaceAll("/", "."))\r
+ .forEach(System.out::println);\r
+ }\r
+\r
+}\r
package demo.soot;\r
\r
-import java.io.File;\r
-import java.util.Arrays;\r
import java.util.Iterator;\r
-import java.util.List;\r
import java.util.Map;\r
-import java.util.function.Consumer;\r
\r
import soot.MethodOrMethodContext;\r
import soot.PackManager;\r
import soot.Scene;\r
import soot.SceneTransformer;\r
+import soot.SootMethod;\r
import soot.Transform;\r
import soot.jimple.toolkits.callgraph.CallGraph;\r
import soot.jimple.toolkits.callgraph.Edge;\r
-import demo.util.DemoUtil;\r
import demo.util.MemoryInfo;\r
\r
public class ClassHierarchyPerformance {\r
\r
public static void main(String[] args) {\r
-// List<String> argsList = new ArrayList<String>(Arrays.asList(args));\r
- List<String> argsList = Arrays.asList(new String[]{\r
- "-cp",\r
- "bin" + File.pathSeparator + \r
- "bin/testers" + File.pathSeparator + \r
- DemoUtil.RT_PATH + File.pathSeparator +\r
- DemoUtil.JCE_PATH,\r
- "-whole-program",\r
- "-main-class",\r
- "testers.CallGraphs",//main-class\r
-// "-app",\r
-// "testers.CallGraphs",\r
- "-p",\r
- "cg.cha",\r
- "apponly:true,verbose:true",\r
- "testers.CallGraphs",//argument classes\r
- "testers.A" //\r
- });\r
-\r
- long start = System.currentTimeMillis();\r
- \r
PackManager.v().getPack("wjtp").add(new Transform("wjtp.myTrans", new SceneTransformer() {\r
@Override\r
protected void internalTransform(String phaseName, Map options) {\r
MethodOrMethodContext caller = callers.next();\r
for (Iterator<Edge> edges = cg.edgesOutOf(caller); edges.hasNext();) {\r
Edge edge = edges.next();\r
-// System.out.println(edge.getSrc().method().toString() + " -> " + edge.getTgt().method().toString());\r
+ SootMethod srcMethod = edge.getSrc().method();\r
+ SootMethod tgtMethod = edge.getTgt().method();\r
+// System.out.println(srcMethod.toString() + " -> " + tgtMethod.toString());\r
}\r
- }\r
- \r
- long end = System.currentTimeMillis();\r
- \r
- System.out.println((end - start) + " [ms]");\r
- System.out.println(MemoryInfo.getMemoryInfo());\r
+ } \r
}\r
}));\r
\r
- args = argsList.toArray(new String[0]);\r
-\r
+ long start = System.currentTimeMillis();\r
soot.Main.main(args);\r
+ long end = System.currentTimeMillis();\r
+\r
+ System.err.println((end - start) + " [ms]");\r
+ System.err.println(MemoryInfo.getMemoryInfo());\r
}\r
\r
}\r
--- /dev/null
+package demo.soot;\r
+\r
+import java.util.Map;\r
+\r
+import soot.Body;\r
+import soot.BodyTransformer;\r
+import soot.PackManager;\r
+import soot.PhaseOptions;\r
+import soot.Transform;\r
+import soot.toolkits.graph.ExceptionalUnitGraph;\r
+import soot.toolkits.graph.UnitGraph;\r
+import soot.toolkits.graph.pdg.HashMutablePDG;\r
+import soot.toolkits.graph.pdg.PDGNode;\r
+import soot.toolkits.graph.pdg.ProgramDependenceGraph;\r
+import demo.util.MemoryInfo;\r
+\r
+public class ControlAndDataDependencePerformance {\r
+\r
+ public static void main(String[] args) {\r
+ PackManager.v().getPack("jap").add(new Transform("jap.myTransform", new BodyTransformer() {\r
+ @Override\r
+ protected void internalTransform(Body body, String phase, Map options) {\r
+ try {\r
+ UnitGraph graph = new ExceptionalUnitGraph(body);\r
+ ProgramDependenceGraph pdg = new HashMutablePDG(graph);\r
+ for (PDGNode node1: pdg.getNodes()) {\r
+ for (PDGNode node2: pdg.getDependents(node1)) {\r
+// System.out.println(node1.toShortString() + " -> " + node2.toShortString());\r
+ }\r
+ }\r
+ } catch (RuntimeException e) {\r
+ System.err.println(body.getMethod());\r
+ }\r
+ }\r
+ }));\r
+ PhaseOptions.v().setPhaseOption("jap.npc", "on");\r
+ \r
+ long start = System.currentTimeMillis();\r
+ soot.Main.main(args);\r
+ long end = System.currentTimeMillis();\r
+\r
+ System.err.println((end - start) + " [ms]");\r
+ System.err.println(MemoryInfo.getMemoryInfo());\r
+ }\r
+\r
+}\r
\r
import java.util.Iterator;\r
\r
-import com.ibm.wala.ipa.callgraph.AnalysisCache;\r
-import com.ibm.wala.ipa.callgraph.AnalysisOptions;\r
import com.ibm.wala.ipa.callgraph.AnalysisScope;\r
import com.ibm.wala.ipa.callgraph.CGNode;\r
-import com.ibm.wala.ipa.callgraph.CallGraph;\r
import com.ibm.wala.ipa.callgraph.Entrypoint;\r
+import com.ibm.wala.ipa.callgraph.cha.CHACallGraph;\r
import com.ibm.wala.ipa.callgraph.impl.Util;\r
import com.ibm.wala.ipa.cha.ClassHierarchy;\r
import com.ibm.wala.util.config.AnalysisScopeReader;\r
try {\r
long start = System.currentTimeMillis();\r
\r
- String appJar = "bin/demo/testdata";\r
- AnalysisScope scope = AnalysisScopeReader.makeJavaBinaryAnalysisScope(appJar, (new FileProvider()).getFile(DemoUtil.REGRESSION_EXCLUSIONS));\r
-\r
+ AnalysisScope scope = AnalysisScopeReader.makeJavaBinaryAnalysisScope(args[0], (new FileProvider()).getFile(DemoUtil.REGRESSION_EXCLUSIONS));\r
ClassHierarchy cha = ClassHierarchy.make(scope);\r
-\r
- Iterable<Entrypoint> entrypoints = com.ibm.wala.ipa.callgraph.impl.Util.makeMainEntrypoints(scope, cha);\r
- AnalysisOptions options = new AnalysisOptions(scope, entrypoints);\r
- com.ibm.wala.ipa.callgraph.CallGraphBuilder builder = Util.makeZeroCFABuilder(options, new AnalysisCache(), cha, scope);\r
- CallGraph cg = builder.makeCallGraph(options, null);\r
+ Iterable<Entrypoint> entrypoints = Util.makeMainEntrypoints(scope, cha);\r
+ CHACallGraph cg = new CHACallGraph(cha);\r
+ cg.init(entrypoints);\r
\r
for (int i = 0; i < cg.getMaxNumber(); i++) {\r
CGNode caller = cg.getNode(i);\r
\r
long end = System.currentTimeMillis();\r
\r
- System.out.println((end - start) + " [ms]");\r
- System.out.println(MemoryInfo.getMemoryInfo());\r
+ System.err.println((end - start) + " [ms]");\r
+ System.err.println(MemoryInfo.getMemoryInfo());\r
} catch (Exception e) {\r
e.printStackTrace();\r
}\r
import com.ibm.wala.ipa.modref.ModRef;\r
import com.ibm.wala.ipa.slicer.HeapExclusions;\r
import com.ibm.wala.ipa.slicer.PDG;\r
-import com.ibm.wala.ipa.slicer.Statement;\r
import com.ibm.wala.ipa.slicer.Slicer.ControlDependenceOptions;\r
import com.ibm.wala.ipa.slicer.Slicer.DataDependenceOptions;\r
+import com.ibm.wala.ipa.slicer.Statement;\r
import com.ibm.wala.util.config.AnalysisScopeReader;\r
import com.ibm.wala.util.intset.OrdinalSet;\r
import com.ibm.wala.util.io.FileProvider;\r
\r
import demo.util.DemoUtil;\r
+import demo.util.MemoryInfo;\r
\r
public class ControlAndDataDependencePerformance {\r
\r
public static void main(String[] args) {\r
try {\r
- String appJar = "bin/demo/testdata";\r
- AnalysisScope scope = AnalysisScopeReader.makeJavaBinaryAnalysisScope(appJar, (new FileProvider()).getFile(DemoUtil.REGRESSION_EXCLUSIONS));\r
-\r
- ClassHierarchy cha = ClassHierarchy.make(scope);\r
+ long start = System.currentTimeMillis();\r
\r
+ AnalysisScope scope = AnalysisScopeReader.makeJavaBinaryAnalysisScope(args[0], (new FileProvider()).getFile(DemoUtil.REGRESSION_EXCLUSIONS));\r
+ ClassHierarchy cha = ClassHierarchy.make(scope);\r
Iterable<Entrypoint> entrypoints = Util.makeMainEntrypoints(scope, cha);\r
+ AnalysisCache cache = new AnalysisCache();\r
AnalysisOptions options = new AnalysisOptions(scope, entrypoints);\r
-\r
- // build the call graph\r
- CallGraphBuilder cgb = Util.makeZeroCFABuilder(options, new AnalysisCache(),cha, scope, null, null);\r
- CallGraph cg = cgb.makeCallGraph(options, null);\r
- PointerAnalysis<InstanceKey> pa = cgb.getPointerAnalysis();\r
+ CallGraphBuilder builder = Util.makeZeroCFABuilder(options, cache, cha, scope);\r
+ CallGraph cg = builder.makeCallGraph(options, null);\r
+ PointerAnalysis<InstanceKey> pa = null;\r
\r
for (int i = 0; i < cg.getMaxNumber(); i++) {\r
CGNode node = cg.getNode(i);\r
Map<CGNode, OrdinalSet<PointerKey>> mod = null;\r
Map<CGNode, OrdinalSet<PointerKey>> ref = null;\r
PDG pdg = new PDG(node, pa, mod, ref, dOptions, cOptions, exclusions, cg, modRef);\r
- \r
- for (Iterator<Statement> itr = pdg.iterator(); itr.hasNext();) {\r
- Statement s1 = itr.next();\r
+ for (Iterator<Statement> statements = pdg.iterator(); statements.hasNext();) {\r
+ Statement s1 = statements.next();\r
for (Iterator<Statement> succs = pdg.getSuccNodes(s1); succs.hasNext();) {\r
Statement s2 = succs.next();\r
// System.out.println(s1.toString() + " -> " + s2.toString());\r
}\r
}\r
}\r
+ \r
+ long end = System.currentTimeMillis();\r
+ \r
+ System.err.println((end - start) + " [ms]");\r
+ System.err.println(MemoryInfo.getMemoryInfo());\r
} catch (Exception e) {\r
e.printStackTrace();\r
}\r