Heya guys,
I'm doing a research project in formal methods, and I'm looking into
BCEl to be able to provide me with certain information about a given
class (there are benefits, from our point of view, to class inspection
over source code inspection that I need not go into).
I have managed to program a vast majority of the features we require
pretty quickly, and I am more than glad to see the programs dependency
on CFParse disappear. The method that does the analysis is in this
format:
foreach(JavaClass c : somearray)
{
// Inspect the class
InstructionList list = c.getInstructionList();
foreach(Instruction i : list.getInstructions())
{
switch(i.getOpcode())
{
// do something when certain instructions are found
}
}
}
There is no modification of the classes as they are processed, and
information is basically dumped into a database (currently to the screen
while debugging) as its found
Problems:
1) When a ARETURN instruction is found, I need to know the identifier
and type of the object being returned. Return type is not enough, and
from what I can see all methods in Java bytecode return
java.lang.Object, so using getType() on the ARETURN instruction doesn't
help either.
2) When an InvokeInstruction is found, I need to know the identifiers of
each of the objects used as arguments for the invoked method.
I understand the Java VM is stack based, so at first I thought it would
be logical to maintain a stack of variables so by knowing how many
things are removed from the stack (for example 1 in the case of
ARETURN... I think...) I can find out what idents/types are being used.
However I just cant get it to work. I'm not familiar enough with every
bytecode instruction to be able to do it. I have been looking at the
CodeHTML class to see how it works, but right now I can't get my head
around the logic.
If someone could help, give me example/pseudo code if you've done
something similar, direct me to a package/library that can provide me
with this information, etc, I would be very grateful.
Thanks all
Regards
Mac
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]