Just briefly, "int a" in your example is simply a local variable, modified
by the istore instruction. If your class looked something like the
following, then you would *probably* see the putfield.
Class A
{
int a;
private void m(String s){
String b = s;
a=51;
a=1001;
}
}
-----Original Message-----
From: vicki kozel [mailto:[EMAIL PROTECTED]
Sent: Tuesday, September 23, 2003 12:18 PM
To: BCEL Users List
Subject: RE: help required
Hi,
I printed the instruction list of the following method, and I thought
putfield and putstatic would be in the list. But they aren't. I am
interested to capture a modification of a local or a global variable, like
of int a in the following method:
private void m(String s){
String b = s;
int a=51;
a=1001;
}
Here's the instruction list of the method given above:
Method is private void m(String arg0)
Instructions are :
0: aload_1[43](1)
1: astore_2[77](1)
2: bipush[16](2) 51
4: istore_3[62](1)
5: sipush[17](3) 1001
8: istore_3[62](1)
9: return[177](1)
Any suggestions?
Thanks!
Vicki
Toby Reyelts <[EMAIL PROTECTED]> wrote:
Hi Vicki,
1) We should be careful with our terminology here. I'm talking about using
putfield and putstatic to specifically check for modifications of _instance
and static field members_ This will always catch a write to those fields as
long as it's not through reflection - In fact, this is how JDO checks for
dirty object. I don't see how aload is going to help you here - or anywhere.
2) Somebody has already detailed an approach and problems with reflection.
3) Sorry, no.
God bless,
-Toby Reyelts
-----Original Message-----
From: vicki kozel [mailto:[EMAIL PROTECTED]
Sent: Friday, September 12, 2003 11:54 AM
To: BCEL Users List
Subject: RE: help required
Thanks a lot for the response, Toby! It is very helpful. I hope you can
answer these couple of question about your comments:
1) "you can look for the putfield and putstatic instructions"
Q. I was going to look for ALOAD instructions to spot where variables get
loaded onto stack - you suggest "putfield" and "putstatic" instead of that ?
2)"but that won't catch any modifications that occur through reflection."
Q. So, is there any way at all to find instructions related to modification
of variables through reflection?
3) Can you suggest some code examples or open source tools that do something
similar to what my task is? - I am trying to modify classfile, but not at
the run time.
Thanks a lot!
Vicki
[EMAIL PROTECTED] wrote:
First, you don't necessarily know what local variables are, unless the
original
compiler included the line number information in the class file. If it did,
you
could try to scan for store instructions.
Second, you can look for the putfield and putstatic instructions to see when
instance and static variables are modified, but that won't catch any
modifications that occur through reflection.
God bless,
-Toby Reyelts
> I also was working on a simple BCEL based tool that will allow me to track
all
> variables, global and LOCAL, at the moment when they are changed. I just
want to
> insert instructions into the Method of profiled class to printout name and
the
> value of a variable - local variables too! - when they are changed. Any
> suggestions??
> thanks!!
> Vicki
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
[EMAIL PROTECTED]
415-668-6967 home
415-806-9093 cell
---------------------------------
Do you Yahoo!?
Yahoo! SiteBuilder - Free, easy-to-use web site design software
[EMAIL PROTECTED]
415-668-6967 home
415-806-9093 cell
---------------------------------
Do you Yahoo!?
Yahoo! SiteBuilder - Free, easy-to-use web site design software
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]