<div dir="ltr"><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small"><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small">Hi All,</div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small"><br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small">I
want to find all the references to the objects which are not escaping a
thread i.e. Thread local objects. I am using ThreadLocalObjectAnalysis
to do it. But it is throwing NullPointerException in
SmartMethodInfoFlowAnalysis. I don't know the reason. I am using Soot
version 3.0 and Java version 1.7.<br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small"><br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small">Code and output are attached for the reference:</div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small"><br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small">Soot-Args and addition to pack:</div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small">-------------------------------------------------------------------<br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small">String
sootArgs[] = {"-cp", classPath, "-pp", "-keep-bytecode-offset",
"-main-class", "test.Test", "-no-bodies-for-excluded", "-w",
"-process-dir", dirPath, "-p", "cg", "enabled:true", "-p", "cg.spark",
"enabled:true", "-p", "jb", "use-original-names:true", "test.Test"};<br> <br> EscapeAnalysis analysisTransformer = new EscapeAnalysis();<br><br> PackManager.v().getPack("wjtp").add(new Transform("wjtp.esc", analysisTransformer));<br><br> soot.Main.main(sootArgs);</div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small">----------------------------------------------------------------------</div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small"><br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small">Analysis: <br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small"><br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small">public class EscapeAnalysis extends SceneTransformer {<br><br> @Override<br> protected void internalTransform(String arg0, Map<String, String> arg1) {<br> <br> ThreadLocalObjectsAnalysis tlo = new ThreadLocalObjectsAnalysis(new SynchObliviousMhpAnalysis());<br> tlo.precompute();<br> <br> Chain<SootClass> classChain = Scene.v().getApplicationClasses();<br> for(SootClass c : classChain) {<br> System.out.println("\nClass : " + c + "\n");<br> List<SootMethod> methodList = c.getMethods();<br><br> for(SootMethod m : methodList) {<br> if(m.isConcrete()) {<br> System.out.println("\nMethod : "+ m);<br> System.out.print("Thread Local var: ");<br> Chain<Local> localVars = m.retrieveActiveBody().getLocals();<br> for(Local l : localVars) {<br> if(tlo.isObjectThreadLocal(l, m))<br> System.out.print(l.getName() + " ");<br> }</div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small"> }<br> }</div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small"> }<br> }</div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small">}</div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small"><br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small"><br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small">----------------------------------------------------------------------------------------</div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small"><br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small">Code to be analyzed:</div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small"><br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small">package test;<br><br>class Test{<br><br> public static void main(String args[]){<br> ClassA obj = new ClassA();<br> MyThread t1 = new MyThread(obj);<br> MyThread t2 = new MyThread(obj);<br> t1.start();<br> t2.start();<br><br> }<br>}<br><br>class MyThread extends Thread{<br> int localInt;<br> ClassA obj;<br> public MyThread(ClassA obj){<br> localInt = 1;<br> this.obj = obj;<br> }<br><br> public void run(){<br> System.out.println("localInt: "+ localInt);<br> System.out.println("obj.i: "+ obj.i);<br> }<br>}<br><br>class ClassA{<br> public int i = 10;<br>}</div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small"><br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small"><br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small">-----------------------------------------------------------------------------------<br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small"><br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small">Output:</div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small"><br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small">Soot started on Fri Apr 03 12:09:42 IST 2020<br>[Call Graph] For information on where the call graph may be incomplete, use the verbose option to the cg phase.<br>[Spark] Pointer Assignment Graph in 0.1 seconds.<br>[Spark] Type masks in 0.0 seconds.<br>[Spark] Pointer Graph simplified in 0.0 seconds.<br>[Spark] Propagation in 0.3 seconds.<br>[Spark] Solution found in 0.3 seconds.<br>[local-objects] Analyzing local objects for test.MyThread<br>[local-objects] preparing class Fri Apr 03 12:09:44 IST 2020<br>[local-objects] analyzing class Fri Apr 03 12:09:44 IST 2020<br>java.lang.NullPointerException<br> at soot.jimple.toolkits.infoflow.SmartMethodInfoFlowAnalysis.handleInvokeExpr(SmartMethodInfoFlowAnalysis.java:408)<br> at soot.jimple.toolkits.infoflow.SmartMethodInfoFlowAnalysis.addFlowToCdfg(SmartMethodInfoFlowAnalysis.java:793)<br> at soot.jimple.toolkits.infoflow.SmartMethodInfoFlowAnalysis.generateAbbreviatedInfoFlowGraph(SmartMethodInfoFlowAnalysis.java:151)<br> at soot.jimple.toolkits.infoflow.SmartMethodInfoFlowAnalysis.<init>(SmartMethodInfoFlowAnalysis.java:128)<br> at soot.jimple.toolkits.infoflow.ClassInfoFlowAnalysis.getMethodInfoFlowSummary(ClassInfoFlowAnalysis.java:91)</div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small">.....<br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small"><br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small">Please help.</div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small"><br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small">Thanks,</div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small">Rajendra</div></div></div>