<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> </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> </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> </o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p> </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> </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> </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> </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> </o:p></p><div><p class=MsoNormal>Hi,<o:p></o:p></p><div><p class=MsoNormal><o:p> </o:p></p></div><div><p class=MsoNormal>I've been trying to run Paddle with Soot, but I'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.<o:p></o:p></p></div><div><p class=MsoNormal><o:p> </o:p></p></div><div><p class=MsoNormal>I've read up on my literature for Soot and several of the Lhotak papers/thesis. I've also read the Soot Survivors guide in it's entirety. <o:p></o:p></p></div><div><p class=MsoNormal><o:p> </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> </o:p></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.<o:p></o:p></p></div><div><p class=MsoNormal><o:p> </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.<init>(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> </o:p></p></div><div><div><p class=MsoNormal>public class PaddleTest {<o:p></o:p></p></div><div><p class=MsoNormal><o:p> </o:p></p></div><div><p class=MsoNormal><span class=apple-tab-span> </span>public final static String projectDir = "<my workspace path>/TestProject/bin";<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> </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<String> sootArgs = new LinkedList<String>();<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("-process-dir"); <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("-w"); // enable whole program mode<o:p></o:p></p></div><div><p class=MsoNormal><o:p> </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("-p");<o:p></o:p></p></div><div><p class=MsoNormal><span class=apple-tab-span> </span>sootArgs.add("cg.paddle");<o:p></o:p></p></div><div><p class=MsoNormal><span class=apple-tab-span> </span>sootArgs.add("enabled:true,verbose:true");<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("Number of edges in callgraph: " + 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("Soot class path " + 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> </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. 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> </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> </o:p></p></div><div><p class=MsoNormal>~Ben<o:p></o:p></p></div><div><p class=MsoNormal><o:p> </o:p></p></div></div></div></body></html>