[Soot-list] Add Expression works strange.

Roman Petriev vvpiroman at gmail.com
Sun Feb 8 04:24:19 EST 2015


Thanks you, Elena. I think, that I can use different disassemblers for
checking, e.g. Eclipse Bytecode Viewer.
I make obfuscations, therefore I can add instructions after
return sometimes.


2015-02-06 21:51 GMT+03:00 Elena Sherman <elenasherman at boisestate.edu>:

> Eric, yes, it works correctly. I've added the print statement in Roman's
> code and it does prints out 500. So, I don't know if it should be reported
> or not.
> When I was looking for the format of iinc_w I found the following
> iinc_w index byte1 byte2
> where the value to be incremented is calculated as byte1 << 8 | byte2
> When I've changed the value to increment from 500 to  512 and  javap
> changed the bytecode from "iinc_w        #0,  1" to "iinc_w        #0,
>  2", so apparently javap shows only byte1 part since 1<<8 = 256 and 2<<8 is
> 512 but fails to show byte 2, which should be 244 for 500 and 0 for 512.
>
> Roman, when you instrument the code make sure to add your instrumentation
> before return statement, for example by using units.insertBefore(....) or
> units.insertAfter(...) methods.
>
>
> On Fri, Feb 6, 2015 at 5:37 AM, Eric Bodden <eric.bodden at sit.fraunhofer.de
> > wrote:
>
>> Thanks a lot for the input Elena!
>>
>> Wow, that's odd! I have never seen javap give such apparently
>> false/misleading information. Is this something we should report to Oracle?
>>
>> Anyway, I would assume that the bytecode is actually correct?
>>
>> Cheers,
>> Eric
>>
>>
>> > On 06.02.2015, at 01:22, Elena Sherman <elenasherman at boisestate.edu>
>> wrote:
>> >
>> > Roman,
>> >
>> > I've run your code with the initialization of the local variable part
>> added to it. It looks like that depending on the bytecode viewer I get
>> different bytecode. When I use javap -c Decomp.class I get the following
>> (what you get):
>> >
>> > Compiled from "Decomp.java"
>> > public class decomp.Decomp {
>> >   public decomp.Decomp();
>> >     Code:
>> >        0: aload_0
>> >        1: invokespecial #1                  // Method
>> java/lang/Object."<init>":()V
>> >        4: return
>> >        5: iconst_0
>> >        6: istore_0
>> >        7: iinc_w        #0,  1              // #0
>> >
>> >   public static void main(java.lang.String[]);
>> >     Code:
>> >        0: return
>> >        1: iconst_0
>> >        2: istore_0
>> >        3: iinc_w        #0,  1              // #0
>> > }
>> >
>> > However, when I use Eclipse's bytecode viewer I get the following:
>> >
>> > // Compiled from Decomp.java (version 1.2 : 46.0, super bit)
>> > public class decomp.Decomp {
>> >   // Method descriptor #12 ()V
>> >   // Stack: 1, Locals: 1
>> >   public Decomp();
>> >      0  aload_0 [this]
>> >      1  invokespecial java.lang.Object() [1]
>> >      4  return
>> >      5  wide
>> >      6  iinc 0 500 [this]
>> >       Line numbers:
>> >         [pc: 0, line: 0]
>> >         [pc: 1, line: 1]
>> >         [pc: 4, line: 2]
>> >         [pc: 5, line: 3]
>> >       Attribute: LineNumberTable Length: 18
>> >       Attribute: LineNumberTable Length: 18
>> >
>> >   // Method descriptor #11 ([Ljava/lang/String;)V
>> >   // Stack: 0, Locals: 1
>> >   public static void main(java.lang.String[] arg0);
>> >     0  return
>> >     1  wide
>> >     2  iinc 0 500 [arg0]
>> >       Line numbers:
>> >         [pc: 0, line: 0]
>> >         [pc: 1, line: 1]
>> >       Attribute: LineNumberTable Length: 10
>> >       Attribute: LineNumberTable Length: 10
>> > }
>> >
>> > Which is correct. So, apparently the wide incremental instruction,
>> i.e., iinc_w should be interpreted a bit different than its regular version
>> iinc. I'm not a bytecode specialist, so I cannot tell exactly how to
>> interpret iinc_w's arguments in terms of iinc.
>> >
>> > In general bytecode can be quite confusing, so in order to check
>> whether your instrumentation works as expected try to print something out
>> like the value of the local variable you're trying to increment. Thus when
>> you execute the instrumented code you will know for sure if this is what
>> you want or not, or there are any errors in the instrumentation.
>> >
>> > Hope it helps.
>> >
>> > Elena
>> >
>> > On Thu, Feb 5, 2015 at 11:38 AM, Roman Petriev <vvpiroman at gmail.com>
>> wrote:
>> > Test cases here.
>> > Is it good? Do you need anything else?
>> >
>> > 2015-02-05 12:58 GMT+03:00 Bodden, Eric <eric.bodden at sit.fraunhofer.de
>> >:
>> > Hi Roman.
>> >
>> > > I hope that is (exactly) what you want to see.
>> >
>> > Ideal would be a minimal but runnable example, including your driver
>> class for Soot and the command-line options you are using. We should be
>> able to reproduce this with as little effort as possible.
>> >
>> > Thanks,
>> > Eric
>> >
>> >
>>
>> --
>> Prof. Eric Bodden, Ph.D., http://sse.ec-spride.de/ http://bodden.de/
>> Head of Secure Software Engineering at Fraunhofer SIT, TU Darmstadt and
>> EC SPRIDE
>> Tel: +49 6151 16-75422    Fax: +49 6151 869-127
>> Room B5.11, Fraunhofer SIT, Rheinstraße 75, 64295 Darmstadt
>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: https://mailman.CS.McGill.CA/pipermail/soot-list/attachments/20150208/0346ef73/attachment-0001.html 


More information about the Soot-list mailing list