<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 15 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:Wingdings;
        panose-1:5 0 0 0 0 0 0 0 0 0;}
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        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;}
p.msonormal0, li.msonormal0, div.msonormal0
        {mso-style-name:msonormal;
        mso-margin-top-alt:auto;
        margin-right:0in;
        mso-margin-bottom-alt:auto;
        margin-left:0in;
        font-size:12.0pt;
        font-family:"Times New Roman",serif;}
span.apple-tab-span
        {mso-style-name:apple-tab-span;}
span.EmailStyle19
        {mso-style-type:personal-reply;
        font-family:"Calibri",sans-serif;
        color:#1F497D;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-size:10.0pt;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
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="EN-US">
<div>Hi Steven,</div>
<div><br>
</div>
<div>Thank you very much for your quick fix and prompt response! It would be great if you can provide the corresponding jar. It can be aslo great if you can deploy this jar in some maven repository as it is done for soot. Thank you in advance! </div>
<div><span>-- <br>
<div>Best Regards,</div>
<div>Yury Zhauniarovich</div>
</span></div>
<div><br>
</div>
<div>On Thu, 2017-03-16 at 20:17 +0000, Arzt, Steven wrote:</div>
<blockquote type="cite">
<div class="WordSection1">
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D">Hi Yury,<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 style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D">You found a bug in FlowDroid
</span><span style="font-size:11.0pt;font-family:Wingdings;color:#1F497D">J</span><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D"> I have applied a fix and committed it to the official repository. If you are using FlowDroid from
 source, you can immediately update your copy and you will find that the deleteFeed() method appears in the callgraph just fine. If you need a new JAR file, please let me know and I will upload an official 1.5.1 version on Github that contains this bugfix.<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 style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D">Thanks for spotting the bug.<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 style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D">Best regards,<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D">  Steven
<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>
<div>
<div style="border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal"><b><span style="font-size:11.0pt;font-family:"Calibri",sans-serif">From:</span></b><span style="font-size:11.0pt;font-family:"Calibri",sans-serif"> Soot-list [mailto:soot-list-bounces@cs.mcgill.ca]
<b>On Behalf Of </b>Dr. Yury Zhauniarovich<br>
<b>Sent:</b> Thursday, March 16, 2017 7:46 AM<br>
<b>To:</b> soot-list@cs.mcgill.ca<br>
<b>Subject:</b> [Soot-list] Method Call Graph does not report all the methods<o:p></o:p></span></p>
</div>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<div>
<p class="MsoNormal">Dear community,<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">I faced with an issue with Soot (Flowdroid) when I analyze an apk file that I do not see all the methods in a method call graph. Here are the details of the problem.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<div>
<p class="MsoNormal">I am trying to build a method call graph with Soot. I am experimenting with apks from F-Droid, and I noticed that Soot seems to miss some methods. For example, for the arXiv apk
<a href="https://f-droid.org/repository/browse/?fdfilter=arXiv&fdid=com.commonsware.android.arXiv">
https://f-droid.org/repository/browse/?fdfilter=arXiv&fdid=com.commonsware.android.arXiv</a> in the class arXivDB the method deleteFeed() is not found by Soot.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">To extract MCG nodes I use the following code:<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">       SetupApplication app = new SetupApplication(ANDROID_JAR, APK);<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">app.setCallbackFile("./lib_res/AndroidCallbacks.txt");<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">try {<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">    app.calculateSourcesSinksEntrypoints("./lib_res/SourcesAndSinks.txt");<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">} catch (Exception e) {<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">    e.printStackTrace();<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">}<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">soot.G.reset();<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">Options.v().set_src_prec(Options.src_prec_apk);<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">Options.v().set_process_dir(Collections.singletonList(APK));<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">Options.v().set_force_android_jar(ANDROID_JAR);<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">Options.v().set_whole_program(true);<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">Options.v().set_allow_phantom_refs(true);<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">Options.v().set_output_format(Options.output_format_none);<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">Options.v().setPhaseOption("cg.spark", "on");<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">new SootConfigForAndroid().setSootOptions(Options.v());<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">Scene.v().loadNecessaryClasses();<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">SootMethod entryPoint = app.getEntryPointCreator().createDummyMain();<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">entryPoint.getActiveBody().validate();<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">Options.v().set_main_class(entryPoint.getSignature());<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">Scene.v().setEntryPoints(Collections.singletonList(entryPoint));<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">// System.out.println(entryPoint.getActiveBody());<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">PackManager.v().runPacks();<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">CallGraph cg = Scene.v().getCallGraph();<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">int numOfNodes = 0;<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">for (Iterator<MethodOrMethodContext> mtds = cg.sourceMethods(); mtds.hasNext();) {<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">    SootMethod mtd = mtds.next().method();<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">    System.out.println(mtd.getSignature());<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">    numOfNodes++;<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"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">I have an assumption that there are some optimizations that reduce method call graph but I do not know where to look them for and how to disable them. Could you please help me?<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">Thank you in advance!<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">-- <o:p></o:p></p>
<div>
<p class="MsoNormal">Best Regards,<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">Yury Zhauniarovich<o:p></o:p></p>
</div>
</div>
<p class="MsoNormal"><br>
CONFIDENTIALITY NOTICE:<br>
This email and any attachments transmitted with it are confidential and intended for the use of individual or entity to which it is addressed. If you have received this email in error, please delete it immediately and inform the sender. Unless you are the intended
 recipient, you may not use, disclose, copy or distribute this email or any attachments included. The contents of this email, including any attachments, may be subjected to copyright law. In such cases, the contents may not be copied, adapted, distributed or
 transmitted without the consent of the copyright owner.<o:p></o:p></p>
</div>
</blockquote>
<br clear="both">
CONFIDENTIALITY  NOTICE:<BR>
This email and any attachments transmitted with it are confidential and intended for the use of individual or entity to which it is addressed. If you have received this email in error, please delete it immediately and inform the sender. Unless you are the intended recipient, you may not use, disclose, copy or distribute this email or any attachments included. The contents of this email, including any attachments, may be subjected to copyright law. In such cases, the contents may not be copied, adapted, distributed or transmitted without the consent of the copyright owner.<BR>
</body>
</html>