[Prev] Thread [Next] |
[Prev] Date [Next]
Re: Popping from operand stack
Mon Nov 17 17:00:23 2008
Thanks for the help.
Actually, I want to completely replace the if instruction with my code. So
at runtime, instead of calling the if instruction if_icmpeq, my code shall
get executed. So I just need the values from the stack to make a method call
passing these two values as arguments, thus, bypassing the if instruction.
On Mon, Nov 17, 2008 at 6:56 PM, Arrin Daley <[EMAIL PROTECTED]> wrote:
> Hi Pranav
> Perhaps a better way might be to insert DUP (or some of the other DUP
> variants) after the iload? instructions so that you copy the contents of
> the stack then you are free to do what you like with these as long as you
> return the stack to the state it was in before your instrumentation.
> BYTECODES STACK
> 0: iload_1 i1
> 1: iload_2 i1,i2
> DUP2 i1,12,i1,i2
> ....Some code to instrument the values of i1 and i2...
> 2: if_icmpeq 16
> 5: getstatic #2; //Field
> 8: ldc #3; //String TRUE
> ............ as so on.
> Note in this case copying the values was easy because they were single word
> values doubles require more care and you may have to use other DUP bytecodes
> and perhaps something a bit more complicated, shouldn't be too bad though.
> Notice the stack returns to i1,i2 if you don't return the stack to the same
> state you'll have problems.
> Remember to call MethodGen.setMaxStack() when you're finished because
> you've possibly changed the maximum stack height.
> Hope this helps
> Bye Arrin
> Pranav Kuber wrote:
>> I'm new to using BCEL and have a query.
>> I'm trying to instrument all IF instructions. So I just need to find out a
>> way where I could access the operand stack constants (iload_1 and
>> For example, -
>> if I have some code in this format
>> do Something...
>> do something...
>> The corresponding bytecode generated would be -
>> 0: iload_1
>> 1: iload_2
>> 2: if_icmpeq 16
>> 5: getstatic #2; //Field
>> 8: ldc #3; //String TRUE
>> ............ as so on.
>> I need to pop iload_1 and iload_2 from the stack and store them somewhere.
>> Is there any way I could do that?
>> Thanks for the help.
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]