<div dir="ltr">Hi,<div><br></div><div>I am writing an static analysis that use call graph + point-to-sets on android applications. I was able to construct a call graph using infoflow's to generate a dummy main. Unfortunately, the point-to-sets that I am obtaining for local variables are always empty. Below are the relevant pieces of code. If you guys could point me in the right direction, I would really appreciate it.</div><div><br></div><div>Thanks!</div><div>-- Octav</div><div><br></div><div>===== Driver ====</div><div>public static void main(String[] args) throws Exception {<br></div><div>...</div><div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; SetupApplication app = new SetupApplication(sdkLocation, apkLocation);</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>app.calculateSourcesSinksEntrypoints("SourcesAndSinks.txt");<span class="Apple-tab-span" style="white-space:pre">                </span></div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; soot.G.reset();<span class="Apple-tab-span" style="white-space:pre">                </span>&nbsp;</div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre">                </span>Options.v().set_src_prec(Options.src_prec_apk);</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>Options.v().set_process_dir(Collections.singletonList(apkLocation));</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>Options.v().set_android_jars(sdkLocation);</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>Options.v().set_whole_program(true);</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>Options.v().set_allow_phantom_refs(true);</div><div><span class="Apple-tab-span" style="white-space:pre">                </span></div><div><span class="Apple-tab-span" style="white-space:pre">                </span>Options.v().setPhaseOption("jb","use-original-names:true");</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>Options.v().setPhaseOption("cg.spark", "on");</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>Options.v().setPhaseOption("cg.verbose", "true");<span class="Apple-tab-span" style="white-space:pre">                </span></div><div><span class="Apple-tab-span" style="white-space:pre">                </span></div><div><span class="Apple-tab-span" style="white-space:pre">                </span>Options.v().set_output_format(Options.output_format_none);<span class="Apple-tab-span" style="white-space: pre;">        </span></div><div><br></div><div><span class="Apple-tab-span" style="white-space: pre;">                </span>Scene.v().loadNecessaryClasses();<br></div><div><span class="Apple-tab-span" style="white-space:pre">                </span>SootMethod entryPoint = app.getEntryPointCreator().createDummyMain();</div><div><span class="Apple-tab-span" style="white-space: pre;">                </span>Options.v().set_main_class(entryPoint.getSignature());<br></div><div><span class="Apple-tab-span" style="white-space:pre">                </span>Scene.v().setEntryPoints(Collections.singletonList(entryPoint));<span class="Apple-tab-span" style="white-space: pre;">                </span></div><div><span class="Apple-tab-span" style="white-space: pre;">                </span>PackManager.v().runPacks();<br></div></div><div><br></div><div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; CallGraph cg = Scene.v().getCallGraph();</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>PointsToAnalysis pta = Scene.v().getPointsToAnalysis();</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>deadlineAnalysis(cg, pta);</div></div><div>...</div><div>}</div><div><br></div><div>==== deadlineAnalysis ====</div><div><div>Unit u = ...</div><div>PatchingChain&lt;Unit&gt; units = e.src().getActiveBody().getUnits();</div></div><div>Unit nextUnit = units.getSuccOf(u);<br></div><div>List&lt;ValueBox&gt; nextValues = nextUnit.getDefBoxes();<br></div><div>Local localValue = (Local) nextValues.get(0).getValue();<br></div><div>pta.reachingObjects(localValue) &nbsp; ===&gt; Returns empty point-to-sets for all the locals<br></div><div><br></div><div>=== testcase ===</div><div><div><span class="Apple-tab-span" style="white-space:pre">        </span>protected void onResume() {</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>super.onResume();</div><div><span class="Apple-tab-span" style="white-space:pre">                </span></div><div><span class="Apple-tab-span" style="white-space:pre">                </span>int s;</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>int s2;</div><div><span class="Apple-tab-span" style="white-space: pre;">                </span>s = 0;<br></div><div><span class="Apple-tab-span" style="white-space:pre">                </span></div><div><span class="Apple-tab-span" style="white-space:pre">                </span>// junk code<span class="Apple-tab-span" style="white-space:pre">                </span></div><div><span class="Apple-tab-span" style="white-space:pre">                </span>for (int i = 0; i &lt; 100; i++) {</div><div><span class="Apple-tab-span" style="white-space:pre">                        </span>s = s + i;</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>}</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>s2 = s;</div><div><br></div><div><span class="Apple-tab-span" style="white-space: pre;">                </span>System.out.println(s2);<br></div><div><span class="Apple-tab-span" style="white-space:pre">        </span>}</div></div><div><br></div></div>