<div dir="ltr"><div>I do transformations for JBCO. My class extends BodyTransformer and implements IJbcoTransform. I transform simplest app with only one class with main method.</div><div><br></div><span style="font-size:12.8000001907349px">Minimal </span>TC1:<div><br></div><div><div>@Override</div><div>    protected void internalTransform(Body body, String phaseName, Map&lt;String, String&gt; options) {</div><div>        </div><div>        int weight = soot.jbco.Main.getWeight(phaseName, body.getMethod().getSignature());</div><div>        if (weight == 0){ </div><div>            return;</div><div>        }</div><div>        </div><div>        PatchingChain&lt;Unit&gt; units = body.getUnits();  </div><div><br></div><div>        Local intLocal = Jimple.v().newLocal(&quot;myInt&quot;, IntType.v());</div><div>        body.getLocals().add(intLocal);</div><div><br></div><div>        AssignStmt as3 = Jimple.v().newAssignStmt(intLocal, Jimple.v().newAddExpr(intLocal, IntConstant.v(500)));</div><div>        units.add(as3);</div><div>    }</div><div><br></div><div><span style="font-size:12.8000001907349px">Minimal </span>TC2:</div><div><br></div><div><div>@Override</div><div>    protected void internalTransform(Body body, String phaseName, Map&lt;String, String&gt; options) {</div><div>        </div><div>        int weight = soot.jbco.Main.getWeight(phaseName, body.getMethod().getSignature());</div><div>        if (weight == 0){ </div><div>            return;</div><div>        }</div><div>        </div><div>        PatchingChain&lt;Unit&gt; units = body.getUnits();  </div><div><br></div><div>        Local intLocal = Jimple.v().newLocal(&quot;myInt&quot;, IntType.v());</div><div>        body.getLocals().add(intLocal);</div><div><br></div><div>        AssignStmt as1 = Jimple.v().newAssignStmt(intLocal, IntConstant.v(0));</div><div>        units.add(as1);</div><div><br></div><div>        AssignStmt as3 = Jimple.v().newAssignStmt(intLocal, Jimple.v().newAddExpr(intLocal, IntConstant.v(500)));</div><div>        units.add(as3);</div><div>    }</div></div></div><div><br></div><div>Erroneous code will be added after return statement of main method.</div><div>I hope that is (exactly) what you want to see.<br></div><div><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">2015-02-04 11:43 GMT+03:00 Bodden, Eric <span dir="ltr">&lt;<a href="mailto:eric.bodden@sit.fraunhofer.de" target="_blank">eric.bodden@sit.fraunhofer.de</a>&gt;</span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hmmm, this looks wrong. Can you please post a minimal test case to reproduce this?<br>
<br>
Cheers,<br>
Eric<br>
<div><div class="h5"><br>
&gt; On 04.02.2015, at 08:51, Roman Petriev &lt;<a href="mailto:vvpiroman@gmail.com">vvpiroman@gmail.com</a>&gt; wrote:<br>
&gt;<br>
&gt; I try to initialize, and after this I have:<br>
&gt;<br>
&gt; iconst_0<br>
&gt; istore_1<br>
&gt; iinc_w        #1,  1<br>
&gt;<br>
&gt; So, it isn&#39;t help.<br>
&gt;<br>
&gt;<br>
&gt; 2015-02-04 2:08 GMT+03:00 Elena Sherman &lt;<a href="mailto:elenasherman@boisestate.edu">elenasherman@boisestate.edu</a>&gt;:<br>
&gt; Roman,<br>
&gt;<br>
&gt; Shouldn&#39;t you first initialize intLocal before using it in the addition expression?<br>
&gt; For example to 0 :<br>
&gt;<br>
&gt; AssignStmt as1 = Jimple.v().newAssignStmt(intLocal, IntConstant.v(0));<br>
&gt; units.add(as1);<br>
&gt; AssignStmt as2 = Jimple.v().newAssignStmt(intLocal, Jimple.v().newAddExpr(intLocal, IntConstant.v(500)));<br>
&gt; units.add(as2);<br>
&gt;<br>
&gt; On Tue, Feb 3, 2015 at 2:38 PM, Roman Petriev &lt;<a href="mailto:vvpiroman@gmail.com">vvpiroman@gmail.com</a>&gt; wrote:<br>
&gt; Hello everybody!<br>
&gt; I have code:<br>
&gt;<br>
&gt; Local intLocal = Jimple.v().newLocal(&quot;myInt&quot;, IntType.v());<br>
&gt; body.getLocals().add(intLocal);<br>
&gt; AssignStmt as2 = Jimple.v().newAssignStmt(intLocal, Jimple.v().newAddExpr(intLocal, IntConstant.v(500)));<br>
&gt; units.add(as2);<br>
&gt;<br>
&gt; So I want to increase local variable on 500.<br>
&gt; In byte code after transformation I see:<br>
&gt;<br>
&gt; iinc_w        #5,  1<br>
&gt;<br>
&gt; Why 1 instead of 500? Where I mistake?<br>
&gt;<br>
&gt; Thanks for any help.<br>
&gt;<br>
&gt; Best regards,<br>
&gt; Roman.<br>
&gt;<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>
&gt;<br>
&gt;<br>
&gt;<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>
</div></div>--<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: +49 6151 16-75422    Fax: +49 6151 869-127<br>
Room B5.11, Fraunhofer SIT, Rheinstraße 75, 64295 Darmstadt<br>
<br>
</blockquote></div><br></div>