<div dir="ltr">Hi,<br>I tried to run paddle example from soot survivor&#39;s guide. Paddle definitely seems out of sync with soot.<br><br>After properly setting up everything, I get the error: <br><br>Exception in thread &quot;main&quot; java.lang.NoClassDefFoundError: soot/util/Heap$Keys<br>    at soot.jimple.paddle.OFCGScene.&lt;init&gt;(OFCGScene.java:88)<br>    at soot.jimple.paddle.OFCGConfig.setup(OFCGConfig.java:29)<br>    at soot.jimple.paddle.PaddleScene.setup(PaddleScene.java:1321)<br>    at soot.jimple.paddle.PaddleTransformer.setup(PaddleTransformer.java:84)<br>    at dk.brics.paddle.PointsToAnalysis.setPaddlePointsToAnalysis(PointsToAnalysis.java:120)<br>    at dk.brics.paddle.PointsToAnalysis.main(PointsToAnalysis.java:44)<br><br>There&#39;s no such class &quot;soot.util.Heap&quot; in the latest soot codebase.<br><br>By the way, soot-trunk.jar doesn&#39;t include paddle distribution.<br><br><br>On Friday, August 14, 2015 at 12:31:13 AM UTC-7, Steven Arzt wrote:<blockquote class="gmail_quote" style="margin: 0;margin-left: 0.8ex;border-left: 1px #ccc solid;padding-left: 1ex;"><div link="blue" vlink="purple" lang="DE"><div><p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1f497d">Hi Ben,</span></p><p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1f497d"> </span></p><p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1f497d" lang="EN-US">You are using a fairly outdated version of Soot. The plugin is not really regularly updated with the current version of Soot. Thus, if you are just interested in obtaining Soot, I would either take the source code from Github and compile it or take our nightly builds: <a href="https://ssebuild.cased.de/nightly/soot/lib/soot-trunk.jar" target="_blank" rel="nofollow" onmousedown="this.href=&#39;https://www.google.com/url?q\75https%3A%2F%2Fssebuild.cased.de%2Fnightly%2Fsoot%2Flib%2Fsoot-trunk.jar\46sa\75D\46sntz\0751\46usg\75AFQjCNFwmxjO9xrbVU313WBWbDodpE07lw&#39;;return true;" onclick="this.href=&#39;https://www.google.com/url?q\75https%3A%2F%2Fssebuild.cased.de%2Fnightly%2Fsoot%2Flib%2Fsoot-trunk.jar\46sa\75D\46sntz\0751\46usg\75AFQjCNFwmxjO9xrbVU313WBWbDodpE07lw&#39;;return true;">https://ssebuild.cased.de/<wbr>nightly/soot/lib/soot-trunk.<wbr>jar</a>. This build should directly include Paddle and should at least not throw any funny errors due to mismatching method signatures.</span></p><p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1f497d" lang="EN-US"> </span></p><p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1f497d" lang="EN-US">Best regards,</span></p><p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1f497d" lang="EN-US">  Steven</span></p><p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1f497d" lang="EN-US"> </span></p><p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1f497d"> </span></p><p class="MsoNormal"><span style="font-size:13.5pt;font-family:&quot;Courier New&quot;;color:black" lang="EN-US">M.Sc. M.Sc. Steven Arzt</span><span style="font-size:11.0pt;font-family:&quot;Helvetica&quot;,&quot;sans-serif&quot;;color:#1f497d" lang="EN-US"></span></p><p class="MsoNormal"><span style="font-size:10.0pt;font-family:&quot;Courier New&quot;;color:black" lang="EN-US">Secure Software Engineering Group (SSE)</span></p><p class="MsoNormal"><span style="font-size:10.0pt;font-family:&quot;Courier New&quot;;color:black" lang="EN-US">European Center for Security and Privacy by Design (EC SPRIDE) </span></p><p class="MsoNormal"><span style="font-size:10.0pt;font-family:&quot;Courier New&quot;;color:black">Rheinstraße 75</span></p><p class="MsoNormal"><span style="font-size:10.0pt;font-family:&quot;Courier New&quot;;color:black">D-64293 Darmstadt</span></p><p class="MsoNormal"><span style="font-size:10.0pt;font-family:&quot;Courier New&quot;;color:black">Phone: +49 61 51 869-336</span></p><p class="MsoNormal"><span style="font-size:10.0pt;font-family:&quot;Courier New&quot;;color:black">Fax: +49 61 51 16-72118</span></p><p class="MsoNormal"><span style="font-size:10.0pt;font-family:&quot;Courier New&quot;;color:black" lang="EN-US">eMail: </span><span style="font-size:10.0pt;font-family:&quot;Courier New&quot;;color:black"><a href="javascript:" target="_blank" gdf-obfuscated-mailto="_jLRWJ1lCAAJ" rel="nofollow" onmousedown="this.href=&#39;javascript:&#39;;return true;" onclick="this.href=&#39;javascript:&#39;;return true;"><span lang="EN-US">steven.arzt@ec-spride.de</span></a></span><span style="font-size:10.0pt;font-family:&quot;Courier New&quot;;color:black" lang="EN-US"></span></p><p class="MsoNormal"><span style="font-size:10.0pt;font-family:&quot;Courier New&quot;;color:black">Web: <a href="http://sse.ec-spride.de/" target="_blank" rel="nofollow" onmousedown="this.href=&#39;http://www.google.com/url?q\75http%3A%2F%2Fsse.ec-spride.de%2F\46sa\75D\46sntz\0751\46usg\75AFQjCNGigQaO_uOHvandnthTpq57clh04g&#39;;return true;" onclick="this.href=&#39;http://www.google.com/url?q\75http%3A%2F%2Fsse.ec-spride.de%2F\46sa\75D\46sntz\0751\46usg\75AFQjCNGigQaO_uOHvandnthTpq57clh04g&#39;;return true;">http://sse.ec-spride.de</a></span></p><p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1f497d"> </span></p><p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1f497d" lang="EN-US"> </span></p><p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1f497d" lang="EN-US"> </span></p><p class="MsoNormal"><b><span style="font-size:10.0pt;font-family:&quot;Tahoma&quot;,&quot;sans-serif&quot;">Von:</span></b><span style="font-size:10.0pt;font-family:&quot;Tahoma&quot;,&quot;sans-serif&quot;"> <a href="javascript:" target="_blank" gdf-obfuscated-mailto="_jLRWJ1lCAAJ" rel="nofollow" onmousedown="this.href=&#39;javascript:&#39;;return true;" onclick="this.href=&#39;javascript:&#39;;return true;">soot-lis...@CS.McGill.CA</a> [mailto:<a href="javascript:" target="_blank" gdf-obfuscated-mailto="_jLRWJ1lCAAJ" rel="nofollow" onmousedown="this.href=&#39;javascript:&#39;;return true;" onclick="this.href=&#39;javascript:&#39;;return true;">soot-lis...@CS.<wbr>McGill.CA</a>] <b>Im Auftrag von </b>Ben Holland<br><b>Gesendet:</b> Freitag, 14. August 2015 00:17<br><b>An:</b> <a href="javascript:" target="_blank" gdf-obfuscated-mailto="_jLRWJ1lCAAJ" rel="nofollow" onmousedown="this.href=&#39;javascript:&#39;;return true;" onclick="this.href=&#39;javascript:&#39;;return true;">soot...@cs.mcgill.ca</a><br><b>Betreff:</b> [Soot-list] Basic usage of Paddle with Soot</span></p><p class="MsoNormal"> </p><div><p class="MsoNormal">Hi,</p><div><p class="MsoNormal"> </p></div><div><p class="MsoNormal">I&#39;ve been trying to run Paddle with Soot, but I&#39;m having some issues.  I just want to get access to the PointsTo results and the callgraph.  My question is does Paddle actually work with Soot or is it out of synch with the current Soot?  It looks like work on Paddle more or less stopped in 2008.</p></div><div><p class="MsoNormal"> </p></div><div><p class="MsoNormal">I&#39;ve read up on my literature for Soot and several of the Lhotak papers/thesis.  I&#39;ve also read the Soot Survivors guide in it&#39;s entirety.  </p></div><div><p class="MsoNormal"> </p></div><div><p class="MsoNormal">I&#39;m using the nightly build of Paddle from <a href="http://plg.uwaterloo.ca/~olhotak/build/" target="_blank" rel="nofollow" onmousedown="this.href=&#39;http://www.google.com/url?q\75http%3A%2F%2Fplg.uwaterloo.ca%2F~olhotak%2Fbuild%2F\46sa\75D\46sntz\0751\46usg\75AFQjCNGdmFLvDagn8qjAjEGt0sn4lo8Mhg&#39;;return true;" onclick="this.href=&#39;http://www.google.com/url?q\75http%3A%2F%2Fplg.uwaterloo.ca%2F~olhotak%2Fbuild%2F\46sa\75D\46sntz\0751\46usg\75AFQjCNGdmFLvDagn8qjAjEGt0sn4lo8Mhg&#39;;return true;">http://plg.uwaterloo.ca/~<wbr>olhotak/build/</a>, and I&#39;m using the version of Soot available through the Eclipse update site at <a href="https://github.com/Sable/soot/wiki/Running-Soot-as-Eclipse-Plugin" target="_blank" rel="nofollow" onmousedown="this.href=&#39;https://www.google.com/url?q\75https%3A%2F%2Fgithub.com%2FSable%2Fsoot%2Fwiki%2FRunning-Soot-as-Eclipse-Plugin\46sa\75D\46sntz\0751\46usg\75AFQjCNGBYtYfD6xEFahJckCDPCUECHcn0w&#39;;return true;" onclick="this.href=&#39;https://www.google.com/url?q\75https%3A%2F%2Fgithub.com%2FSable%2Fsoot%2Fwiki%2FRunning-Soot-as-Eclipse-Plugin\46sa\75D\46sntz\0751\46usg\75AFQjCNGBYtYfD6xEFahJckCDPCUECHcn0w&#39;;return true;">https://github.com/Sable/soot/<wbr>wiki/Running-Soot-as-Eclipse-<wbr>Plugin</a>.</p></div><div><p class="MsoNormal"> </p></div><div><p class="MsoNormal">Running the following program gives me some errors.  Occasionally the error is different breaking on a Field instead of an array first.</p></div><div><p class="MsoNormal"> </p></div><div><div><p class="MsoNormal">java.lang.NoSuchMethodError: soot.Scene.getFieldNumberer()<wbr>Lsoot/util/ArrayNumberer;</p></div><div><p class="MsoNormal"><span>            </span>at soot.jimple.paddle.<wbr>ArrayElement.&lt;init&gt;(<wbr>ArrayElement.java:28)</p></div><div><p class="MsoNormal"><span>            </span>at soot.PaddleSingletons.soot_<wbr>jimple_paddle_ArrayElement(<wbr>PaddleSingletons.java:33)</p></div><div><p class="MsoNormal"><span>            </span>at soot.jimple.paddle.<wbr>ArrayElement.v(ArrayElement.<wbr>java:30)</p></div><div><p class="MsoNormal"><span>            </span>at soot.jimple.paddle.<wbr>NodeFactory.caseArgv(<wbr>NodeFactory.java:127)</p></div><div><p class="MsoNormal"><span>            </span>at soot.jimple.paddle.<wbr>MethodNodeFactory.<wbr>addMiscEdges(<wbr>MethodNodeFactory.java:228)</p></div><div><p class="MsoNormal"><span>            </span>at soot.jimple.paddle.<wbr>TradMethodPAGBuilder.build(<wbr>TradMethodPAGBuilder.java:63)</p></div><div><p class="MsoNormal"><span>            </span>at soot.jimple.paddle.<wbr>TradMethodPAGBuilder.update(<wbr>TradMethodPAGBuilder.java:48)</p></div><div><p class="MsoNormal"><span>            </span>at soot.jimple.paddle.<wbr>DependencyManager.update(<wbr>DependencyManager.java:76)</p></div><div><p class="MsoNormal"><span>            </span>at soot.jimple.paddle.OFCGScene.<wbr>solve(OFCGScene.java:168)</p></div><div><p class="MsoNormal"><span>            </span>at soot.jimple.paddle.OFCGConfig.<wbr>solve(OFCGConfig.java:35)</p></div><div><p class="MsoNormal"><span>            </span>at soot.jimple.paddle.<wbr>PaddleScene.solve(PaddleScene.<wbr>java:1390)</p></div><div><p class="MsoNormal"><span>            </span>at soot.jimple.paddle.<wbr>PaddleTransformer.solve(<wbr>PaddleTransformer.java:99)</p></div><div><p class="MsoNormal"><span>            </span>at soot.jimple.paddle.<wbr>PaddleTransformer.<wbr>internalTransform(<wbr>PaddleTransformer.java:46)</p></div><div><p class="MsoNormal"><span>            </span>at soot.SceneTransformer.<wbr>transform(SceneTransformer.<wbr>java:39)</p></div><div><p class="MsoNormal"><span>            </span>at soot.jimple.paddle.PaddleHook.<wbr>internalTransform(PaddleHook.<wbr>java:43)</p></div><div><p class="MsoNormal"><span>            </span>at soot.SceneTransformer.<wbr>transform(SceneTransformer.<wbr>java:39)</p></div><div><p class="MsoNormal"><span>            </span>at soot.Transform.apply(<wbr>Transform.java:90)</p></div><div><p class="MsoNormal"><span>            </span>at soot.RadioScenePack.<wbr>internalApply(RadioScenePack.<wbr>java:57)</p></div><div><p class="MsoNormal"><span>            </span>at soot.jimple.toolkits.<wbr>callgraph.CallGraphPack.<wbr>internalApply(CallGraphPack.<wbr>java:49)</p></div><div><p class="MsoNormal"><span>            </span>at soot.Pack.apply(Pack.java:116)</p></div><div><p class="MsoNormal"><span>            </span>at soot.PackManager.<wbr>runWholeProgramPacks(<wbr>PackManager.java:564)</p></div><div><p class="MsoNormal"><span>            </span>at soot.PackManager.<wbr>runPacksNormally(PackManager.<wbr>java:457)</p></div><div><p class="MsoNormal"><span>            </span>at soot.PackManager.runPacks(<wbr>PackManager.java:392)</p></div><div><p class="MsoNormal"><span>            </span>at soot.Main.run(Main.java:271)</p></div><div><p class="MsoNormal"><span>            </span>at soot.Main.main(Main.java:147)</p></div><div><p class="MsoNormal"><span>            </span>at PaddleTest.main(PaddleTest.<wbr>java:43)</p></div></div><div><p class="MsoNormal"> </p></div><div><div><p class="MsoNormal">public class PaddleTest {</p></div><div><p class="MsoNormal"> </p></div><div><p class="MsoNormal"><span>            </span>public final static String projectDir = &quot;&lt;my workspace path&gt;/TestProject/bin&quot;;</p></div><div><p class="MsoNormal"><span>            </span></p></div><div><p class="MsoNormal"><span>            </span>public static void main(String[] args) {</p></div><div><p class="MsoNormal"><span>                        </span></p></div><div><p class="MsoNormal"><span>                        </span>// reset soot</p></div><div><p class="MsoNormal"><span>                        </span>Scene.v().<wbr>releaseActiveHierarchy();</p></div><div><p class="MsoNormal"><span>                        </span>Scene.v().releaseCallGraph();</p></div><div><p class="MsoNormal"><span>                        </span>Scene.v().<wbr>releaseFastHierarchy();</p></div><div><p class="MsoNormal"><span>                        </span>Scene.v().<wbr>releasePointsToAnalysis();</p></div><div><p class="MsoNormal"><span>                        </span>Scene.v().<wbr>releaseReachableMethods();</p></div><div><p class="MsoNormal"><span>                        </span>Scene.v().<wbr>releaseSideEffectAnalysis();</p></div><div><p class="MsoNormal"><span>                        </span>G.reset();</p></div><div><p class="MsoNormal"> </p></div><div><p class="MsoNormal"><span>                        </span>// setup soot args</p></div><div><p class="MsoNormal"><span>                        </span>List&lt;String&gt; sootArgs = new LinkedList&lt;String&gt;();</p></div><div><p class="MsoNormal"><span>                        </span></p></div><div><p class="MsoNormal"><span>                        </span>// analyze entire directory</p></div><div><p class="MsoNormal"><span>                        </span>sootArgs.add(&quot;-process-dir&quot;); </p></div><div><p class="MsoNormal"><span>                        </span>sootArgs.add(projectDir);</p></div><div><p class="MsoNormal"><span>                        </span></p></div><div><p class="MsoNormal"><span>                        </span>sootArgs.add(&quot;-w&quot;); // enable whole program mode</p></div><div><p class="MsoNormal"> </p></div><div><p class="MsoNormal"><span>                        </span>// setup spark options</p></div><div><p class="MsoNormal"><span>                        </span>sootArgs.add(&quot;-p&quot;);</p></div><div><p class="MsoNormal"><span>                        </span>sootArgs.add(&quot;cg.paddle&quot;);</p></div><div><p class="MsoNormal"><span>                        </span>sootArgs.add(&quot;enabled:true,<wbr>verbose:true&quot;);</p></div><div><p class="MsoNormal"><span>                        </span></p></div><div><p class="MsoNormal"><span>                        </span>// run soot</p></div><div><p class="MsoNormal"><span>                        </span>try {</p></div><div><p class="MsoNormal"><span>                              <wbr>     </span>String[] argsArray = sootArgs.toArray(new String[0]);</p></div><div><p class="MsoNormal"><span>                              <wbr>     </span>soot.Main.main(argsArray);</p></div><div><p class="MsoNormal"><span>            </span></p></div><div><p class="MsoNormal"><span>                              <wbr>     </span>// iterate over call graph results</p></div><div><p class="MsoNormal"><span>                              <wbr>     </span>CallGraph callGraph = Scene.v().getCallGraph();</p></div><div><p class="MsoNormal"><span>                              <wbr>     </span>System.out.println(&quot;Number of edges in callgraph: &quot; + callGraph.size());</p></div><div><p class="MsoNormal"><span>                              <wbr>     </span></p></div><div><p class="MsoNormal">//<span>                            <wbr>     </span>PointsToAnalysis p = Scene.v().getPointsToAnalysis(<wbr>);</p></div><div><p class="MsoNormal"><span>                        </span>} catch (Throwable t){</p></div><div><p class="MsoNormal"><span>                              <wbr>     </span>System.out.println(&quot;Soot class path &quot; + Scene.v().getSootClassPath());</p></div><div><p class="MsoNormal"><span>                              <wbr>     </span>t.printStackTrace();</p></div><div><p class="MsoNormal"><span>                        </span>}</p></div><div><p class="MsoNormal"><span>                        </span></p></div><div><p class="MsoNormal"><span>            </span>}</p></div><div><p class="MsoNormal"><span>            </span></p></div><div><p class="MsoNormal">}</p></div></div><div><p class="MsoNormal"> </p></div><div><p class="MsoNormal">The Soot Survivors Guide shows a slightly example, but I have had difficulty setting the classpath and standard soot options using that method.  Do you have a simple example of running Paddle somewhere you could share?</p></div><div><p class="MsoNormal"> </p></div><div><div><p class="MsoNormal">PaddleTransformer pt = new PaddleTransformer();</p></div><div><p class="MsoNormal">PaddleOptions paddle_opt = new PaddleOptions(myPaddleOptions)<wbr>;</p></div><div><p class="MsoNormal">pt.setup(paddle_opt);</p></div><div><p class="MsoNormal">pt.solve(paddle_opt);</p></div><div><p class="MsoNormal">soot.jimple.paddle.Results.v()<wbr>.makeStandardSootResults();</p></div></div><div><p class="MsoNormal"> </p></div><div><p class="MsoNormal">~Ben</p></div><div><p class="MsoNormal"> </p></div></div></div></div></blockquote></div>