Hi Andrew, yep methodgen.setMaxLocals() worked. I included the call after the modification of method.
Thank you Reddy >-----Original Message----- >From: Andrew Huntwork [mailto:[EMAIL PROTECTED] >Sent: Montag, 7. Februar 2005 17:41 >To: BCEL Users List >Subject: Re: Hi All, Problem with local variables > > >you probably need to call MethodGen.setMaxLocals() or whatever that >method is called. if you run javap with -l -c -s (and i forget which >options do what, so read javap help or just use them all), you >should be >shown maxlocals and maxstack for each method. For your instrumented >method, maxlocals should be at least 4 since you are using lv 3. > >Koduru, Rajendra Kumar Reddy wrote: >> Hi All, >> >> I have problem with local variables. >> >> My intention is to insert a statement >> >> Object param = methodA(this) at the start of method >> >> And >> >> methodB(param, "message") at the end of method >> >> I am using try-finally because i need to jump to finally before each >> return statement. >> >> >> I could not understand clearly the concept of local variables >> here >> >> What i am doing is >> >> I am creating a local variable "param" >> setting the index of this variable to "1" using >localVar.setIndex(1) >> >> and retreiving it by using new ALOAD(1) >> >> As i am using try-finally, i should catch and rethrow the exception >> >> so i am storing the exception in localvar 2 in handler >> new ASTORE(2), >> >> and retreiving it back by new ALOAD(2), before rethrowing it. >> >> >> And I am sotirng the return address in localvar 3 >> >> >> And the method is modified, when I tried to open it with >jad, I cant see >> the method , a message is displayed as following >> >> // JavaClassFileOutputException: get_local_var: index out of range >> >> I treid to find the set of isntructions of this method using >javap - c >> option, I got the following , which seems to be correct for me >> >> 0: aload_0 >> 1: invokestatic #986; //Method >> methodA:(Ljava/lang/Object;)Ljava/lang/Object; >> 4: astore_1 >> 5: getstatic #989; //Field >> java/lang/System.out:Ljava/io/PrintStream; >> 8: ldc_w #1006; //String method call : >getCurrentLogonUser >> 11: invokevirtual #996; //Method >> java/io/PrintStream.println:(Ljava/lang/String;)V >> 14: aload_0 >> 15: getfield #584; //Field >> currentUser:Lcom/sap/ip/me/core/UserImpl; >> 18: areturn >> 19: astore_2 >> 20: jsr 25 >> 23: aload_2 >> 24: athrow >> 25: astore_3 >> 26: getstatic #989; //Field >> java/lang/System.out:Ljava/io/PrintStream; >> 29: ldc_w #1008; //String method exit : >getCurrentLogonUser >> 32: invokevirtual #996; //Method >> java/io/PrintStream.println:(Ljava/lang/String;)V >> 35: aload_1 >> 36: ldc_w #1008; //String method exit : >getCurrentLogonUser >> 39: invokestatic #1002; //Method >> methodB:(Ljava/lang/Object;Ljava/lang/String;)V >> 42: ret 3 >> Exception table: >> from to target type >> 14 19 19 any >> >> >> Could you please let me know, where I am wrong.. Is it problem with >> decompiler?? >> >> Cant I set the index of local variables as I like??? >> >> Please help me in this regard... >> >> Thank you >> Reddy >> >> >> >> >> >> --------------------------------------------------------------------- >> To unsubscribe, e-mail: [EMAIL PROTECTED] >> For additional commands, e-mail: [EMAIL PROTECTED] >> >> > >--------------------------------------------------------------------- >To unsubscribe, e-mail: [EMAIL PROTECTED] >For additional commands, e-mail: [EMAIL PROTECTED] > > --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
