<div dir="ltr"><div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif">​Thank you for the explanation !  But the problem still remains ... To make it concrete, I put the whole analysis of the problematic method in the following: </div><br></div><div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif"><b>​(a). Source code : ​</b></div></div><div><div> <font face="monospace, monospace">protected void onCreate(Bundle savedInstanceState) {</font></div><div><font face="monospace, monospace">        super.onCreate(savedInstanceState);</font></div></div><div><div class="gmail_default"><font face="monospace, monospace">​        BasicHttpClient basicClient = new BasicHttpClient();</font></div><div class="gmail_default"><font face="monospace, monospace">        HttpResponse response = basicClient.get(&quot;<a href="http://www.google.com">http://www.google.com</a>&quot;, null);</font></div><div class="gmail_default"><font face="monospace, monospace">}​</font></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif"><br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif"><b>(b). Jimple of method onCreate() : </b></div><div> <font face="monospace, monospace">protected void onCreate(android.os.Bundle)</font></div><div><font face="monospace, monospace">    {</font></div><div><font face="monospace, monospace">        edu.ucsd.mytest.BasicActivity $r0;</font></div><div><font face="monospace, monospace">        android.os.Bundle $r1;</font></div><div><font face="monospace, monospace">        com.turbomanage.httpclient.BasicHttpClient $r2;</font></div><div><font face="monospace, monospace">        $r0 := @this: edu.ucsd.mytest.BasicActivity;</font></div><div><font face="monospace, monospace">        $r1 := @parameter0: android.os.Bundle;</font></div><div><font face="monospace, monospace"><br></font></div><div><font face="monospace, monospace">        specialinvoke $r0.&lt;android.support.v7.app.ActionBarActivity: void onCreate(android.os.Bundle)&gt;($r1);</font></div><div><font face="monospace, monospace" color="#ff0000">        $r2 = new com.turbomanage.httpclient.BasicHttpClient;<div class="gmail_default" style="font-family:arial,helvetica,sans-serif;display:inline">​ // Do not appear in getUnits()​</div></font></div><div><font face="monospace, monospace">        specialinvoke $r2.&lt;com.turbomanage.httpclient.BasicHttpClient: void &lt;init&gt;()&gt;();</font></div><div><font face="monospace, monospace">        virtualinvoke $r2.&lt;com.turbomanage.httpclient.BasicHttpClient: com.turbomanage.httpclient.HttpResponse get(java.lang.String,com.turbomanage.httpclient.ParameterMap)&gt;(&quot;<a href="http://www.google.com">http://www.google.com</a>&quot;, null);</font></div><div><font face="monospace, monospace">        return;</font></div><div><font face="monospace, monospace">    }</font></div></div><div><br></div><div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif"><b>​(c). Output of m.retrieveActiveBody().getUnits(): ​</b></div><div class="gmail_default"><div class="gmail_default"><font face="monospace, monospace">$r0 := @this: edu.ucsd.mytest.BasicActivity</font></div><div class="gmail_default"><font face="monospace, monospace">$r1 := @parameter0: android.os.Bundle</font></div><div class="gmail_default"><font face="monospace, monospace">specialinvoke $r0.&lt;android.support.v7.app.ActionBarActivity: void onCreate(android.os.Bundle)&gt;($r1)</font></div><div class="gmail_default"><font face="monospace, monospace" color="#0000ff">specialinvoke $r2.&lt;com.turbomanage.httpclient.BasicHttpClient: void &lt;init&gt;()&gt;() //No def on $r2!</font></div><div class="gmail_default"><font face="monospace, monospace">virtualinvoke $r2.&lt;com.turbomanage.httpclient.BasicHttpClient: com.turbomanage.httpclient.HttpResponse get(java.lang.String,com.turbomanage.httpclient.ParameterMap)&gt;(&quot;<a href="http://www.google.com">http://www.google.com</a>&quot;, null)</font></div><div class="gmail_default"><font face="monospace, monospace">return</font></div><div style="font-family:arial,helvetica,sans-serif"><br></div><div style="font-family:arial,helvetica,sans-serif"><br></div><div style="font-family:arial,helvetica,sans-serif">So you can see the statement &quot;<span style="color:rgb(255,0,0);font-family:monospace,monospace">$r2 = new com.turbomanage.httpclient.BasicHttpClient</span>&quot; does not appear in the output of getUnits(). </div><div style="font-family:arial,helvetica,sans-serif">Particularly, the statement marked in blue refers to the local $r2, however, there is no def on $r2 in getUnits() !</div><div style="font-family:arial,helvetica,sans-serif"><br></div><div style="font-family:arial,helvetica,sans-serif">Any suggestion is appreciated ! </div></div><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Apr 8, 2015 at 1:00 AM, Steven Arzt <span dir="ltr">&lt;<a href="mailto:Steven.Arzt@cased.de" target="_blank">Steven.Arzt@cased.de</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div lang="DE" link="blue" vlink="purple"><div><p class="MsoNormal"><span lang="EN-US" style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1f497d">Hi Xinxin,<u></u><u></u></span></p><p class="MsoNormal"><span lang="EN-US" style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1f497d"><u></u> <u></u></span></p><p class="MsoNormal"><span lang="EN-US" style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1f497d">Then I have to agree with Eric that such a behavior is completely impossible: Soot reads in the APK file, and stores the unit in the units collections of the respective SootMethods. This is also the only source from which the units are then written out to Jimples files. If the Jimple files on disk are complete, the unit collections must have been as well. The output writer does not inference any new units.<u></u><u></u></span></p><p class="MsoNormal"><span lang="EN-US" style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1f497d"><u></u> <u></u></span></p><p class="MsoNormal"><span lang="EN-US" style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1f497d">Best regards,<u></u><u></u></span></p><p class="MsoNormal"><span lang="EN-US" style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1f497d">  Steven<u></u><u></u></span></p><p class="MsoNormal"><span lang="EN-US" style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1f497d"><u></u> <u></u></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;"> Xinxin Jin [mailto:<a href="mailto:xinxinjin89@gmail.com" target="_blank">xinxinjin89@gmail.com</a>] <br><b>Gesendet:</b> Mittwoch, 8. April 2015 09:57<br><b>An:</b> Steven Arzt<br><b>Cc:</b> Bodden, Eric; <a href="mailto:soot-list@cs.mcgill.ca" target="_blank">soot-list@cs.mcgill.ca</a></span></p><div><div class="h5"><br><b>Betreff:</b> Re: [Soot-list] Soot Body.getUnits() does not get ALL units<u></u><u></u></div></div><p></p><div><div class="h5"><p class="MsoNormal"><u></u> <u></u></p><div><div><p class="MsoNormal"><span style="font-family:&quot;Arial&quot;,&quot;sans-serif&quot;">Hi Steven,<u></u><u></u></span></p></div><div><p class="MsoNormal"><span style="font-family:&quot;Arial&quot;,&quot;sans-serif&quot;"><u></u> <u></u></span></p></div><div><p class="MsoNormal"><span style="font-family:&quot;Arial&quot;,&quot;sans-serif&quot;">My code is from an Android app. I use Dexpler to transform the apk to jimple files. <u></u><u></u></span></p></div><div><p class="MsoNormal"><span style="font-family:&quot;Arial&quot;,&quot;sans-serif&quot;"><u></u> <u></u></span></p></div><div><p class="MsoNormal"><span style="font-family:&quot;Arial&quot;,&quot;sans-serif&quot;">Thanks,<u></u><u></u></span></p></div></div><div><p class="MsoNormal"><u></u> <u></u></p><div><p class="MsoNormal">On Wed, Apr 8, 2015 at 12:54 AM, Steven Arzt &lt;<a href="mailto:Steven.Arzt@cased.de" target="_blank">Steven.Arzt@cased.de</a>&gt; wrote:<u></u><u></u></p><div><div><p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1f497d">Hi Xinxin,</span><u></u><u></u></p><p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1f497d"> </span><u></u><u></u></p><p class="MsoNormal"><span lang="EN-US" style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1f497d">Can you provide a complete test case? From where did you read in your Jimple code?  Did you parse jimple files on disk or Java class files, or an Android APK?</span><u></u><u></u></p><p class="MsoNormal"><span lang="EN-US" style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1f497d"> </span><u></u><u></u></p><p class="MsoNormal"><span lang="EN-US" style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1f497d">Best regards,</span><u></u><u></u></p><p class="MsoNormal"><span lang="EN-US" style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1f497d">  Steven</span><u></u><u></u></p><p class="MsoNormal"><span lang="EN-US" style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1f497d"> </span><u></u><u></u></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="mailto:soot-list-bounces@CS.McGill.CA" target="_blank">soot-list-bounces@CS.McGill.CA</a> [mailto:<a href="mailto:soot-list-bounces@CS.McGill.CA" target="_blank">soot-list-bounces@CS.McGill.CA</a>] <b>Im Auftrag von </b>Xinxin Jin<br><b>Gesendet:</b> Mittwoch, 8. April 2015 09:07<br><b>An:</b> Bodden, Eric<br><b>Cc:</b> <a href="mailto:soot-list@cs.mcgill.ca" target="_blank">soot-list@cs.mcgill.ca</a><br><b>Betreff:</b> Re: [Soot-list] Soot Body.getUnits() does not get ALL units</span><u></u><u></u></p><div><div><p class="MsoNormal"> <u></u><u></u></p><div><div><p class="MsoNormal"><span style="font-family:&quot;Arial&quot;,&quot;sans-serif&quot;">It sounds unreasonable to me too, but that is indeed the problem I encountered ... So I&#39;m just wondering if there are some corner cases not handled by Soot or not ?</span><u></u><u></u></p></div></div><div><p class="MsoNormal"> <u></u><u></u></p><div><p class="MsoNormal">On Tue, Apr 7, 2015 at 11:40 PM, Bodden, Eric &lt;<a href="mailto:eric.bodden@sit.fraunhofer.de" target="_blank">eric.bodden@sit.fraunhofer.de</a>&gt; wrote:<u></u><u></u></p><p class="MsoNormal">Hi Xinxin.<br><br>I am afraid that does not make much sense. By definition, the units of a body are the ones returned by getUnits(). This is a very strong invariant that should never be broken by Soot.<br><br>Cheers,<br>Eric<u></u><u></u></p><div><div><p class="MsoNormal"><br>&gt; On 08.04.2015, at 08:02, Xinxin Jin &lt;<a href="mailto:xinxinjin89@gmail.com" target="_blank">xinxinjin89@gmail.com</a>&gt; wrote:<br>&gt;<br>&gt; Hi there,<br>&gt;<br>&gt; I got a weird problem: Sometimes Body.getUnits() does not list all the units of a method. The following is one example:<br>&gt;<br>&gt; Simplified code snippet:<br>&gt;<br>&gt; void foo() {<br>&gt;     ...<br>&gt;     BasicHttpClient basicClient = new BasicHttpClient();<br>&gt;     ...<br>&gt; }<br>&gt;<br>&gt; ​And in the Jimple file, there are two statements related with &quot;new BasicHttpClient()&quot; :<br>&gt;<br>&gt; $r5 = new com.turbomanage.httpclient.BasicHttpClient;<br>&gt; specialinvoke $r5.&lt;com.turbomanage.httpclient.BasicHttpClient: void &lt;init&gt;()&gt;(); ​<br>&gt;<br>&gt; ​However, when I use retriveActiveBody().getUnits() to print out all the units of foo(), I can only see one statement:<br>&gt; specialinvoke $r5.&lt;com.turbomanage.httpclient.BasicHttpClient: void &lt;init&gt;()&gt;()​<br>&gt;<br>&gt; I don&#39;t know why getUnits() cannot obtain &quot;$r5 = new com.turbomanage.httpclient.BasicHttpClient&quot; ?<br>&gt; ​What kind of units are ignored by Soot ?​<br>&gt;<br>&gt; ​Thanks a lot for any advices !​<br>&gt;<br>&gt;<br>&gt;<br>&gt; --<br>&gt; Xinxin<u></u><u></u></p></div></div><p class="MsoNormal" style="margin-bottom:12.0pt">&gt; _______________________________________________<br>&gt; Soot-list mailing list<br>&gt; <a href="mailto:Soot-list@CS.McGill.CA" target="_blank">Soot-list@CS.McGill.CA</a><br>&gt; <a href="https://mailman.CS.McGill.CA/mailman/listinfo/soot-list" target="_blank">https://mailman.CS.McGill.CA/mailman/listinfo/soot-list</a><br><br>--<br>Prof. Eric Bodden, Ph.D., <a href="http://sse.ec-spride.de/" target="_blank">http://sse.ec-spride.de/</a> <a href="http://bodden.de/" target="_blank">http://bodden.de/</a><br>Head of Secure Software Engineering at Fraunhofer SIT, TU Darmstadt and EC SPRIDE<br>Tel: <a href="tel:%2B49%206151%2016-75422" target="_blank">+49 6151 16-75422</a>    Fax: <a href="tel:%2B49%206151%20869-127" target="_blank">+49 6151 869-127</a><br>Room B5.11, Fraunhofer SIT, Rheinstraße 75, 64295 Darmstadt<u></u><u></u></p></div><p class="MsoNormal"><br><br clear="all"><u></u><u></u></p><div><p class="MsoNormal"> <u></u><u></u></p></div><p class="MsoNormal">-- <u></u><u></u></p><div><p class="MsoNormal"><span style="font-family:&quot;Arial&quot;,&quot;sans-serif&quot;">Xinxin</span><u></u><u></u></p></div></div></div></div></div></div></div><p class="MsoNormal"><br><br clear="all"><u></u><u></u></p><div><p class="MsoNormal"><u></u> <u></u></p></div><p class="MsoNormal">-- <u></u><u></u></p><div><p class="MsoNormal"><span style="font-family:&quot;Arial&quot;,&quot;sans-serif&quot;">Xinxin</span><u></u><u></u></p></div></div></div></div></div></div></blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature"><font face="arial, helvetica, sans-serif">Xinxin</font></div>
</div>