<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40"><head><meta http-equiv=Content-Type content="text/html; charset=utf-8"><meta name=Generator content="Microsoft Word 14 (filtered medium)"><style><!--
/* Font Definitions */
@font-face
        {font-family:Helvetica;
        panose-1:2 11 6 4 2 2 2 2 2 4;}
@font-face
        {font-family:Helvetica;
        panose-1:2 11 6 4 2 2 2 2 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Tahoma;
        panose-1:2 11 6 4 3 5 4 4 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:"Times New Roman","serif";}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
span.apple-tab-span
        {mso-style-name:apple-tab-span;}
span.E-MailFormatvorlage18
        {mso-style-type:personal-reply;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-family:"Calibri","sans-serif";
        mso-fareast-language:EN-US;}
@page WordSection1
        {size:612.0pt 792.0pt;
        margin:70.85pt 70.85pt 2.0cm 70.85pt;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]--></head><body lang=DE link=blue vlink=purple><div class=WordSection1><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>Hi Ben,<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p>&nbsp;</o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>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">https://ssebuild.cased.de/nightly/soot/lib/soot-trunk.jar</a>. This build should directly include Paddle and should at least not throw any funny errors due to mismatching method signatures.<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p>&nbsp;</o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>Best regards,<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>  Steven<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p>&nbsp;</o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p>&nbsp;</o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:13.5pt;font-family:"Courier New";color:black'>M.Sc. M.Sc. Steven Arzt</span><span lang=EN-US style='font-size:11.0pt;font-family:"Helvetica","sans-serif";color:#1F497D'><o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:10.0pt;font-family:"Courier New";color:black'>Secure Software Engineering Group (SSE)<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:10.0pt;font-family:"Courier New";color:black'>European Center for Security and Privacy by Design (EC SPRIDE) <o:p></o:p></span></p><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Courier New";color:black'>Rheinstraße 75<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Courier New";color:black'>D-64293 Darmstadt<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Courier New";color:black'>Phone: +49 61 51 869-336<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Courier New";color:black'>Fax: +49 61 51 16-72118<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:10.0pt;font-family:"Courier New";color:black'>eMail: </span><span style='font-size:10.0pt;font-family:"Courier New";color:black'><a href="mailto:steven.arzt@ec-spride.de"><span lang=EN-US>steven.arzt@ec-spride.de</span></a></span><span lang=EN-US style='font-size:10.0pt;font-family:"Courier New";color:black'><o:p></o:p></span></p><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Courier New";color:black'>Web: <a href="http://sse.ec-spride.de/">http://sse.ec-spride.de</a><o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p>&nbsp;</o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p>&nbsp;</o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p>&nbsp;</o:p></span></p><p class=MsoNormal><b><span style='font-size:10.0pt;font-family:"Tahoma","sans-serif"'>Von:</span></b><span style='font-size:10.0pt;font-family:"Tahoma","sans-serif"'> soot-list-bounces@CS.McGill.CA [mailto:soot-list-bounces@CS.McGill.CA] <b>Im Auftrag von </b>Ben Holland<br><b>Gesendet:</b> Freitag, 14. August 2015 00:17<br><b>An:</b> soot-list@cs.mcgill.ca<br><b>Betreff:</b> [Soot-list] Basic usage of Paddle with Soot<o:p></o:p></span></p><p class=MsoNormal><o:p>&nbsp;</o:p></p><div><p class=MsoNormal>Hi,<o:p></o:p></p><div><p class=MsoNormal><o:p>&nbsp;</o:p></p></div><div><p class=MsoNormal>I've been trying to run Paddle with Soot, but I'm having some issues.&nbsp; I just want to get access to the PointsTo results and the callgraph.&nbsp; My question is does Paddle actually work with Soot or is it out of synch with the current Soot?&nbsp; It looks like work on Paddle more or less stopped in 2008.<o:p></o:p></p></div><div><p class=MsoNormal><o:p>&nbsp;</o:p></p></div><div><p class=MsoNormal>I've read up on my literature for Soot and several of the Lhotak papers/thesis.&nbsp; I've also read the Soot Survivors guide in it's entirety. &nbsp;<o:p></o:p></p></div><div><p class=MsoNormal><o:p>&nbsp;</o:p></p></div><div><p class=MsoNormal>I'm using the nightly build of Paddle from <a href="http://plg.uwaterloo.ca/~olhotak/build/">http://plg.uwaterloo.ca/~olhotak/build/</a>, and I'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">https://github.com/Sable/soot/wiki/Running-Soot-as-Eclipse-Plugin</a>.<o:p></o:p></p></div><div><p class=MsoNormal><o:p>&nbsp;</o:p></p></div><div><p class=MsoNormal>Running the following program gives me some errors.&nbsp; Occasionally the error is different breaking on a Field instead of an array first.<o:p></o:p></p></div><div><p class=MsoNormal><o:p>&nbsp;</o:p></p></div><div><div><p class=MsoNormal>java.lang.NoSuchMethodError: soot.Scene.getFieldNumberer()Lsoot/util/ArrayNumberer;<o:p></o:p></p></div><div><p class=MsoNormal><span class=apple-tab-span>            </span>at soot.jimple.paddle.ArrayElement.&lt;init&gt;(ArrayElement.java:28)<o:p></o:p></p></div><div><p class=MsoNormal><span class=apple-tab-span>            </span>at soot.PaddleSingletons.soot_jimple_paddle_ArrayElement(PaddleSingletons.java:33)<o:p></o:p></p></div><div><p class=MsoNormal><span class=apple-tab-span>            </span>at soot.jimple.paddle.ArrayElement.v(ArrayElement.java:30)<o:p></o:p></p></div><div><p class=MsoNormal><span class=apple-tab-span>            </span>at soot.jimple.paddle.NodeFactory.caseArgv(NodeFactory.java:127)<o:p></o:p></p></div><div><p class=MsoNormal><span class=apple-tab-span>            </span>at soot.jimple.paddle.MethodNodeFactory.addMiscEdges(MethodNodeFactory.java:228)<o:p></o:p></p></div><div><p class=MsoNormal><span class=apple-tab-span>            </span>at soot.jimple.paddle.TradMethodPAGBuilder.build(TradMethodPAGBuilder.java:63)<o:p></o:p></p></div><div><p class=MsoNormal><span class=apple-tab-span>            </span>at soot.jimple.paddle.TradMethodPAGBuilder.update(TradMethodPAGBuilder.java:48)<o:p></o:p></p></div><div><p class=MsoNormal><span class=apple-tab-span>            </span>at soot.jimple.paddle.DependencyManager.update(DependencyManager.java:76)<o:p></o:p></p></div><div><p class=MsoNormal><span class=apple-tab-span>            </span>at soot.jimple.paddle.OFCGScene.solve(OFCGScene.java:168)<o:p></o:p></p></div><div><p class=MsoNormal><span class=apple-tab-span>            </span>at soot.jimple.paddle.OFCGConfig.solve(OFCGConfig.java:35)<o:p></o:p></p></div><div><p class=MsoNormal><span class=apple-tab-span>            </span>at soot.jimple.paddle.PaddleScene.solve(PaddleScene.java:1390)<o:p></o:p></p></div><div><p class=MsoNormal><span class=apple-tab-span>            </span>at soot.jimple.paddle.PaddleTransformer.solve(PaddleTransformer.java:99)<o:p></o:p></p></div><div><p class=MsoNormal><span class=apple-tab-span>            </span>at soot.jimple.paddle.PaddleTransformer.internalTransform(PaddleTransformer.java:46)<o:p></o:p></p></div><div><p class=MsoNormal><span class=apple-tab-span>            </span>at soot.SceneTransformer.transform(SceneTransformer.java:39)<o:p></o:p></p></div><div><p class=MsoNormal><span class=apple-tab-span>            </span>at soot.jimple.paddle.PaddleHook.internalTransform(PaddleHook.java:43)<o:p></o:p></p></div><div><p class=MsoNormal><span class=apple-tab-span>            </span>at soot.SceneTransformer.transform(SceneTransformer.java:39)<o:p></o:p></p></div><div><p class=MsoNormal><span class=apple-tab-span>            </span>at soot.Transform.apply(Transform.java:90)<o:p></o:p></p></div><div><p class=MsoNormal><span class=apple-tab-span>            </span>at soot.RadioScenePack.internalApply(RadioScenePack.java:57)<o:p></o:p></p></div><div><p class=MsoNormal><span class=apple-tab-span>            </span>at soot.jimple.toolkits.callgraph.CallGraphPack.internalApply(CallGraphPack.java:49)<o:p></o:p></p></div><div><p class=MsoNormal><span class=apple-tab-span>            </span>at soot.Pack.apply(Pack.java:116)<o:p></o:p></p></div><div><p class=MsoNormal><span class=apple-tab-span>            </span>at soot.PackManager.runWholeProgramPacks(PackManager.java:564)<o:p></o:p></p></div><div><p class=MsoNormal><span class=apple-tab-span>            </span>at soot.PackManager.runPacksNormally(PackManager.java:457)<o:p></o:p></p></div><div><p class=MsoNormal><span class=apple-tab-span>            </span>at soot.PackManager.runPacks(PackManager.java:392)<o:p></o:p></p></div><div><p class=MsoNormal><span class=apple-tab-span>            </span>at soot.Main.run(Main.java:271)<o:p></o:p></p></div><div><p class=MsoNormal><span class=apple-tab-span>            </span>at soot.Main.main(Main.java:147)<o:p></o:p></p></div><div><p class=MsoNormal><span class=apple-tab-span>            </span>at PaddleTest.main(PaddleTest.java:43)<o:p></o:p></p></div></div><div><p class=MsoNormal><o:p>&nbsp;</o:p></p></div><div><div><p class=MsoNormal>public class PaddleTest {<o:p></o:p></p></div><div><p class=MsoNormal><o:p>&nbsp;</o:p></p></div><div><p class=MsoNormal><span class=apple-tab-span>            </span>public final static String projectDir = &quot;&lt;my workspace path&gt;/TestProject/bin&quot;;<o:p></o:p></p></div><div><p class=MsoNormal><span class=apple-tab-span>            </span><o:p></o:p></p></div><div><p class=MsoNormal><span class=apple-tab-span>            </span>public static void main(String[] args) {<o:p></o:p></p></div><div><p class=MsoNormal><span class=apple-tab-span>                        </span><o:p></o:p></p></div><div><p class=MsoNormal><span class=apple-tab-span>                        </span>// reset soot<o:p></o:p></p></div><div><p class=MsoNormal><span class=apple-tab-span>                        </span>Scene.v().releaseActiveHierarchy();<o:p></o:p></p></div><div><p class=MsoNormal><span class=apple-tab-span>                        </span>Scene.v().releaseCallGraph();<o:p></o:p></p></div><div><p class=MsoNormal><span class=apple-tab-span>                        </span>Scene.v().releaseFastHierarchy();<o:p></o:p></p></div><div><p class=MsoNormal><span class=apple-tab-span>                        </span>Scene.v().releasePointsToAnalysis();<o:p></o:p></p></div><div><p class=MsoNormal><span class=apple-tab-span>                        </span>Scene.v().releaseReachableMethods();<o:p></o:p></p></div><div><p class=MsoNormal><span class=apple-tab-span>                        </span>Scene.v().releaseSideEffectAnalysis();<o:p></o:p></p></div><div><p class=MsoNormal><span class=apple-tab-span>                        </span>G.reset();<o:p></o:p></p></div><div><p class=MsoNormal><o:p>&nbsp;</o:p></p></div><div><p class=MsoNormal><span class=apple-tab-span>                        </span>// setup soot args<o:p></o:p></p></div><div><p class=MsoNormal><span class=apple-tab-span>                        </span>List&lt;String&gt; sootArgs = new LinkedList&lt;String&gt;();<o:p></o:p></p></div><div><p class=MsoNormal><span class=apple-tab-span>                        </span><o:p></o:p></p></div><div><p class=MsoNormal><span class=apple-tab-span>                        </span>// analyze entire directory<o:p></o:p></p></div><div><p class=MsoNormal><span class=apple-tab-span>                        </span>sootArgs.add(&quot;-process-dir&quot;);&nbsp;<o:p></o:p></p></div><div><p class=MsoNormal><span class=apple-tab-span>                        </span>sootArgs.add(projectDir);<o:p></o:p></p></div><div><p class=MsoNormal><span class=apple-tab-span>                        </span><o:p></o:p></p></div><div><p class=MsoNormal><span class=apple-tab-span>                        </span>sootArgs.add(&quot;-w&quot;); // enable whole program mode<o:p></o:p></p></div><div><p class=MsoNormal><o:p>&nbsp;</o:p></p></div><div><p class=MsoNormal><span class=apple-tab-span>                        </span>// setup spark options<o:p></o:p></p></div><div><p class=MsoNormal><span class=apple-tab-span>                        </span>sootArgs.add(&quot;-p&quot;);<o:p></o:p></p></div><div><p class=MsoNormal><span class=apple-tab-span>                        </span>sootArgs.add(&quot;cg.paddle&quot;);<o:p></o:p></p></div><div><p class=MsoNormal><span class=apple-tab-span>                        </span>sootArgs.add(&quot;enabled:true,verbose:true&quot;);<o:p></o:p></p></div><div><p class=MsoNormal><span class=apple-tab-span>                        </span><o:p></o:p></p></div><div><p class=MsoNormal><span class=apple-tab-span>                        </span>// run soot<o:p></o:p></p></div><div><p class=MsoNormal><span class=apple-tab-span>                        </span>try {<o:p></o:p></p></div><div><p class=MsoNormal><span class=apple-tab-span>                                   </span>String[] argsArray = sootArgs.toArray(new String[0]);<o:p></o:p></p></div><div><p class=MsoNormal><span class=apple-tab-span>                                   </span>soot.Main.main(argsArray);<o:p></o:p></p></div><div><p class=MsoNormal><span class=apple-tab-span>            </span><o:p></o:p></p></div><div><p class=MsoNormal><span class=apple-tab-span>                                   </span>// iterate over call graph results<o:p></o:p></p></div><div><p class=MsoNormal><span class=apple-tab-span>                                   </span>CallGraph callGraph = Scene.v().getCallGraph();<o:p></o:p></p></div><div><p class=MsoNormal><span class=apple-tab-span>                                   </span>System.out.println(&quot;Number of edges in callgraph: &quot; + callGraph.size());<o:p></o:p></p></div><div><p class=MsoNormal><span class=apple-tab-span>                                   </span><o:p></o:p></p></div><div><p class=MsoNormal>//<span class=apple-tab-span>                                 </span>PointsToAnalysis p = Scene.v().getPointsToAnalysis();<o:p></o:p></p></div><div><p class=MsoNormal><span class=apple-tab-span>                        </span>} catch (Throwable t){<o:p></o:p></p></div><div><p class=MsoNormal><span class=apple-tab-span>                                   </span>System.out.println(&quot;Soot class path &quot; + Scene.v().getSootClassPath());<o:p></o:p></p></div><div><p class=MsoNormal><span class=apple-tab-span>                                   </span>t.printStackTrace();<o:p></o:p></p></div><div><p class=MsoNormal><span class=apple-tab-span>                        </span>}<o:p></o:p></p></div><div><p class=MsoNormal><span class=apple-tab-span>                        </span><o:p></o:p></p></div><div><p class=MsoNormal><span class=apple-tab-span>            </span>}<o:p></o:p></p></div><div><p class=MsoNormal><span class=apple-tab-span>            </span><o:p></o:p></p></div><div><p class=MsoNormal>}<o:p></o:p></p></div></div><div><p class=MsoNormal><o:p>&nbsp;</o:p></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.&nbsp; Do you have a simple example of running Paddle somewhere you could share?<o:p></o:p></p></div><div><p class=MsoNormal><o:p>&nbsp;</o:p></p></div><div><div><p class=MsoNormal>PaddleTransformer pt = new PaddleTransformer();<o:p></o:p></p></div><div><p class=MsoNormal>PaddleOptions paddle_opt = new PaddleOptions(myPaddleOptions);<o:p></o:p></p></div><div><p class=MsoNormal>pt.setup(paddle_opt);<o:p></o:p></p></div><div><p class=MsoNormal>pt.solve(paddle_opt);<o:p></o:p></p></div><div><p class=MsoNormal>soot.jimple.paddle.Results.v().makeStandardSootResults();<o:p></o:p></p></div></div><div><p class=MsoNormal><o:p>&nbsp;</o:p></p></div><div><p class=MsoNormal>~Ben<o:p></o:p></p></div><div><p class=MsoNormal><o:p>&nbsp;</o:p></p></div></div></div></body></html>