<div dir="ltr"><div class="gmail_default" style="font-family:arial,helvetica,sans-serif">Thanks everyone for the help ! I finally figured out it is my own problem. Everything looks good after I deleted my code related with eliminating dead code. </div></div><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Apr 8, 2015 at 10:18 PM, Bodden, Eric <span dir="ltr">&lt;<a href="mailto:eric.bodden@sit.fraunhofer.de" target="_blank">eric.bodden@sit.fraunhofer.de</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Sorry but those are not accurate steps to reproduce the problem. Please state the Soot command line you use and state how any where exactly you access the units from within Soot. You really have to help us help you.<br>
<span class="HOEnZb"><font color="#888888"><br>
Eric<br>
</font></span><div class="HOEnZb"><div class="h5"><br>
&gt; On 08.04.2015, at 19:37, Xinxin Jin &lt;<a href="mailto:xinxinjin89@gmail.com">xinxinjin89@gmail.com</a>&gt; wrote:<br>
&gt;<br>
&gt; Thanks for the suggestion, Dacong. So I rephrase it here :<br>
&gt;<br>
&gt; * Test input:<br>
&gt; Android app: my_test.apk<br>
&gt;<br>
&gt; * Here&#39;s the command I executed (the soot configuration is the same with flowDroid):<br>
&gt; java -cp $JAVA_CLASSPATH path_to_my_test_class<br>
&gt;<br>
&gt; * I expect the results of getUnits() to be:<br>
&gt; r0 := @this: edu.ucsd.mytest.BasicActivity;<br>
&gt; $r1 := @parameter0: android.os.Bundle;<br>
&gt; specialinvoke $r0.&lt;android.support.v7.app.ActionBarActivity: void onCreate(android.os.Bundle)&gt;($r1);<br>
&gt; $r2 = new com.turbomanage.httpclient.BasicHttpClient;​<br>
&gt; specialinvoke $r2.&lt;com.turbomanage.httpclient.BasicHttpClient: void &lt;init&gt;()&gt;();<br>
&gt; 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" target="_blank">http://www.google.com</a>&quot;, null);<br>
&gt; return;<br>
&gt;<br>
&gt; * But the results of getUnits() is (lack the statement marked in red):<br>
&gt; r0 := @this: edu.ucsd.mytest.BasicActivity;<br>
&gt; $r1 := @parameter0: android.os.Bundle;<br>
&gt; specialinvoke $r0.&lt;android.support.v7.app.ActionBarActivity: void onCreate(android.os.Bundle)&gt;($r1);<br>
&gt; specialinvoke $r2.&lt;com.turbomanage.httpclient.BasicHttpClient: void &lt;init&gt;()&gt;();<br>
&gt; 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" target="_blank">http://www.google.com</a>&quot;, null);<br>
&gt; return;<br>
&gt;<br>
&gt;<br>
&gt; On Wed, Apr 8, 2015 at 10:26 AM, Dacong Yan &lt;<a href="mailto:tonywinslow1986@gmail.com">tonywinslow1986@gmail.com</a>&gt; wrote:<br>
&gt; To help better diagnose the problem, could you rephrase the bug<br>
&gt; reproduction description into something like:<br>
&gt;   * Here&#39;s the input (maybe an apk file?)<br>
&gt;   * Here&#39;s the command I executed: java soot.Main -my -flags ...<br>
&gt;   * I expect the results of getUnits() to be &quot;...&quot;, but it actually is &quot;...&quot;<br>
&gt;<br>
&gt; With concrete input, output and command, everybody can look at the<br>
&gt; same thing and discuss.<br>
&gt;<br>
&gt; On Wed, Apr 8, 2015 at 10:10 AM, Xinxin Jin &lt;<a href="mailto:xinxinjin89@gmail.com">xinxinjin89@gmail.com</a>&gt; wrote:<br>
&gt; &gt; Thank you for the explanation !  But the problem still remains ... To make<br>
&gt; &gt; it concrete, I put the whole analysis of the problematic method in the<br>
&gt; &gt; following:<br>
&gt; &gt;<br>
&gt; &gt; (a). Source code :<br>
&gt; &gt;  protected void onCreate(Bundle savedInstanceState) {<br>
&gt; &gt;         super.onCreate(savedInstanceState);<br>
&gt; &gt;        BasicHttpClient basicClient = new BasicHttpClient();<br>
&gt; &gt;         HttpResponse response = basicClient.get(&quot;<a href="http://www.google.com" target="_blank">http://www.google.com</a>&quot;,<br>
&gt; &gt; null);<br>
&gt; &gt; }<br>
&gt; &gt;<br>
&gt; &gt; (b). Jimple of method onCreate() :<br>
&gt; &gt;  protected void onCreate(android.os.Bundle)<br>
&gt; &gt;     {<br>
&gt; &gt;         edu.ucsd.mytest.BasicActivity $r0;<br>
&gt; &gt;         android.os.Bundle $r1;<br>
&gt; &gt;         com.turbomanage.httpclient.BasicHttpClient $r2;<br>
&gt; &gt;         $r0 := @this: edu.ucsd.mytest.BasicActivity;<br>
&gt; &gt;         $r1 := @parameter0: android.os.Bundle;<br>
&gt; &gt;<br>
&gt; &gt;         specialinvoke $r0.&lt;android.support.v7.app.ActionBarActivity: void<br>
&gt; &gt; onCreate(android.os.Bundle)&gt;($r1);<br>
&gt; &gt;         $r2 = new com.turbomanage.httpclient.BasicHttpClient;<br>
&gt; &gt; // Do not appear in getUnits()<br>
&gt; &gt;         specialinvoke $r2.&lt;com.turbomanage.httpclient.BasicHttpClient: void<br>
&gt; &gt; &lt;init&gt;()&gt;();<br>
&gt; &gt;         virtualinvoke $r2.&lt;com.turbomanage.httpclient.BasicHttpClient:<br>
&gt; &gt; com.turbomanage.httpclient.HttpResponse<br>
&gt; &gt; get(java.lang.String,com.turbomanage.httpclient.ParameterMap)&gt;(&quot;<a href="http://www.google.com" target="_blank">http://www.google.com</a>&quot;,<br>
&gt; &gt; null);<br>
&gt; &gt;         return;<br>
&gt; &gt;     }<br>
&gt; &gt;<br>
&gt; &gt; (c). Output of m.retrieveActiveBody().getUnits():<br>
&gt; &gt; $r0 := @this: edu.ucsd.mytest.BasicActivity<br>
&gt; &gt; $r1 := @parameter0: android.os.Bundle<br>
&gt; &gt; specialinvoke $r0.&lt;android.support.v7.app.ActionBarActivity: void<br>
&gt; &gt; onCreate(android.os.Bundle)&gt;($r1)<br>
&gt; &gt; specialinvoke $r2.&lt;com.turbomanage.httpclient.BasicHttpClient: void<br>
&gt; &gt; &lt;init&gt;()&gt;() //No def on $r2!<br>
&gt; &gt; virtualinvoke $r2.&lt;com.turbomanage.httpclient.BasicHttpClient:<br>
&gt; &gt; com.turbomanage.httpclient.HttpResponse<br>
&gt; &gt; get(java.lang.String,com.turbomanage.httpclient.ParameterMap)&gt;(&quot;<a href="http://www.google.com" target="_blank">http://www.google.com</a>&quot;,<br>
&gt; &gt; null)<br>
&gt; &gt; return<br>
&gt; &gt;<br>
&gt; &gt;<br>
&gt; &gt; So you can see the statement &quot;$r2 = new<br>
&gt; &gt; com.turbomanage.httpclient.BasicHttpClient&quot; does not appear in the output of<br>
&gt; &gt; getUnits().<br>
&gt; &gt; Particularly, the statement marked in blue refers to the local $r2, however,<br>
&gt; &gt; there is no def on $r2 in getUnits() !<br>
&gt; &gt;<br>
&gt; &gt; Any suggestion is appreciated !<br>
&gt; &gt;<br>
&gt; &gt;<br>
&gt; &gt; On Wed, Apr 8, 2015 at 1:00 AM, Steven Arzt &lt;<a href="mailto:Steven.Arzt@cased.de">Steven.Arzt@cased.de</a>&gt; wrote:<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt; Hi Xinxin,<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt; Then I have to agree with Eric that such a behavior is completely<br>
&gt; &gt;&gt; impossible: Soot reads in the APK file, and stores the unit in the units<br>
&gt; &gt;&gt; collections of the respective SootMethods. This is also the only source from<br>
&gt; &gt;&gt; which the units are then written out to Jimples files. If the Jimple files<br>
&gt; &gt;&gt; on disk are complete, the unit collections must have been as well. The<br>
&gt; &gt;&gt; output writer does not inference any new units.<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt; Best regards,<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt;   Steven<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt; Von: Xinxin Jin [mailto:<a href="mailto:xinxinjin89@gmail.com">xinxinjin89@gmail.com</a>]<br>
&gt; &gt;&gt; Gesendet: Mittwoch, 8. April 2015 09:57<br>
&gt; &gt;&gt; An: Steven Arzt<br>
&gt; &gt;&gt; Cc: Bodden, Eric; <a href="mailto:soot-list@cs.mcgill.ca">soot-list@cs.mcgill.ca</a><br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt; Betreff: Re: [Soot-list] Soot Body.getUnits() does not get ALL units<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt; Hi Steven,<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt; My code is from an Android app. I use Dexpler to transform the apk to<br>
&gt; &gt;&gt; jimple files.<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt; Thanks,<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt; On Wed, Apr 8, 2015 at 12:54 AM, Steven Arzt &lt;<a href="mailto:Steven.Arzt@cased.de">Steven.Arzt@cased.de</a>&gt; wrote:<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt; Hi Xinxin,<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt; Can you provide a complete test case? From where did you read in your<br>
&gt; &gt;&gt; Jimple code?  Did you parse jimple files on disk or Java class files, or an<br>
&gt; &gt;&gt; Android APK?<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt; Best regards,<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt;   Steven<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt; Von: <a href="mailto:soot-list-bounces@CS.McGill.CA">soot-list-bounces@CS.McGill.CA</a><br>
&gt; &gt;&gt; [mailto:<a href="mailto:soot-list-bounces@CS.McGill.CA">soot-list-bounces@CS.McGill.CA</a>] Im Auftrag von Xinxin Jin<br>
&gt; &gt;&gt; Gesendet: Mittwoch, 8. April 2015 09:07<br>
&gt; &gt;&gt; An: Bodden, Eric<br>
&gt; &gt;&gt; Cc: <a href="mailto:soot-list@cs.mcgill.ca">soot-list@cs.mcgill.ca</a><br>
&gt; &gt;&gt; Betreff: Re: [Soot-list] Soot Body.getUnits() does not get ALL units<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt; It sounds unreasonable to me too, but that is indeed the problem I<br>
&gt; &gt;&gt; encountered ... So I&#39;m just wondering if there are some corner cases not<br>
&gt; &gt;&gt; handled by Soot or not ?<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt; On Tue, Apr 7, 2015 at 11:40 PM, Bodden, Eric<br>
&gt; &gt;&gt; &lt;<a href="mailto:eric.bodden@sit.fraunhofer.de">eric.bodden@sit.fraunhofer.de</a>&gt; wrote:<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt; Hi Xinxin.<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt; I am afraid that does not make much sense. By definition, the units of a<br>
&gt; &gt;&gt; body are the ones returned by getUnits(). This is a very strong invariant<br>
&gt; &gt;&gt; that should never be broken by Soot.<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt; Cheers,<br>
&gt; &gt;&gt; Eric<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt; &gt; On 08.04.2015, at 08:02, Xinxin Jin &lt;<a href="mailto:xinxinjin89@gmail.com">xinxinjin89@gmail.com</a>&gt; wrote:<br>
&gt; &gt;&gt; &gt;<br>
&gt; &gt;&gt; &gt; Hi there,<br>
&gt; &gt;&gt; &gt;<br>
&gt; &gt;&gt; &gt; I got a weird problem: Sometimes Body.getUnits() does not list all the<br>
&gt; &gt;&gt; &gt; units of a method. The following is one example:<br>
&gt; &gt;&gt; &gt;<br>
&gt; &gt;&gt; &gt; Simplified code snippet:<br>
&gt; &gt;&gt; &gt;<br>
&gt; &gt;&gt; &gt; void foo() {<br>
&gt; &gt;&gt; &gt;     ...<br>
&gt; &gt;&gt; &gt;     BasicHttpClient basicClient = new BasicHttpClient();<br>
&gt; &gt;&gt; &gt;     ...<br>
&gt; &gt;&gt; &gt; }<br>
&gt; &gt;&gt; &gt;<br>
&gt; &gt;&gt; &gt; And in the Jimple file, there are two statements related with &quot;new<br>
&gt; &gt;&gt; &gt; BasicHttpClient()&quot; :<br>
&gt; &gt;&gt; &gt;<br>
&gt; &gt;&gt; &gt; $r5 = new com.turbomanage.httpclient.BasicHttpClient;<br>
&gt; &gt;&gt; &gt; specialinvoke $r5.&lt;com.turbomanage.httpclient.BasicHttpClient: void<br>
&gt; &gt;&gt; &gt; &lt;init&gt;()&gt;();<br>
&gt; &gt;&gt; &gt;<br>
&gt; &gt;&gt; &gt; However, when I use retriveActiveBody().getUnits() to print out all the<br>
&gt; &gt;&gt; &gt; units of foo(), I can only see one statement:<br>
&gt; &gt;&gt; &gt; specialinvoke $r5.&lt;com.turbomanage.httpclient.BasicHttpClient: void<br>
&gt; &gt;&gt; &gt; &lt;init&gt;()&gt;()<br>
&gt; &gt;&gt; &gt;<br>
&gt; &gt;&gt; &gt; I don&#39;t know why getUnits() cannot obtain &quot;$r5 = new<br>
&gt; &gt;&gt; &gt; com.turbomanage.httpclient.BasicHttpClient&quot; ?<br>
&gt; &gt;&gt; &gt; What kind of units are ignored by Soot ?<br>
&gt; &gt;&gt; &gt;<br>
&gt; &gt;&gt; &gt; Thanks a lot for any advices !<br>
&gt; &gt;&gt; &gt;<br>
&gt; &gt;&gt; &gt;<br>
&gt; &gt;&gt; &gt;<br>
&gt; &gt;&gt; &gt; --<br>
&gt; &gt;&gt; &gt; Xinxin<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt; &gt; _______________________________________________<br>
&gt; &gt;&gt; &gt; Soot-list mailing list<br>
&gt; &gt;&gt; &gt; <a href="mailto:Soot-list@CS.McGill.CA">Soot-list@CS.McGill.CA</a><br>
&gt; &gt;&gt; &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>
&gt; &gt;&gt;<br>
&gt; &gt;&gt; --<br>
&gt; &gt;&gt; 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>
&gt; &gt;&gt; Head of Secure Software Engineering at Fraunhofer SIT, TU Darmstadt and EC<br>
&gt; &gt;&gt; SPRIDE<br>
&gt; &gt;&gt; Tel: <a href="tel:%2B49%206151%2016-75422" value="+4961511675422">+49 6151 16-75422</a>    Fax: <a href="tel:%2B49%206151%20869-127" value="+496151869127">+49 6151 869-127</a><br>
&gt; &gt;&gt; Room B5.11, Fraunhofer SIT, Rheinstraße 75, 64295 Darmstadt<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt; --<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt; Xinxin<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt; --<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt; Xinxin<br>
&gt; &gt;<br>
&gt; &gt;<br>
&gt; &gt;<br>
&gt; &gt;<br>
&gt; &gt; --<br>
&gt; &gt; Xinxin<br>
&gt; &gt;<br>
&gt; &gt; _______________________________________________<br>
&gt; &gt; Soot-list mailing list<br>
&gt; &gt; <a href="mailto:Soot-list@CS.McGill.CA">Soot-list@CS.McGill.CA</a><br>
&gt; &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>
&gt; &gt;<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt; --<br>
&gt; Dacong (Tony) Yan | Software Engineer | Google Inc.<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt; --<br>
&gt; Xinxin<br>
&gt; _______________________________________________<br>
&gt; Soot-list mailing list<br>
&gt; <a href="mailto:Soot-list@CS.McGill.CA">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" value="+4961511675422">+49 6151 16-75422</a>    Fax: <a href="tel:%2B49%206151%20869-127" value="+496151869127">+49 6151 869-127</a><br>
Room B5.11, Fraunhofer SIT, Rheinstraße 75, 64295 Darmstadt<br>
<br>
</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>