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]



Reply via email to