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.
-Pranav 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. > > eg > 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... > i1,i2 > 2: if_icmpeq 16 > 5: getstatic #2; //Field > java/lang/System.out:Ljava/io/PrintStream; > 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: > >> Hi, >> >> 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 >> iload_2). >> >> For example, - >> if I have some code in this format >> >> if(a!=b) >> do Something... >> else >> do something... >> >> The corresponding bytecode generated would be - >> >> 0: iload_1 >> 1: iload_2 >> 2: if_icmpeq 16 >> 5: getstatic #2; //Field >> java/lang/System.out:Ljava/io/PrintStream; >> 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. >> >> Regards, >> Pranav >> >> >> > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] >