[Soot-list] How to access/dump the content of a object reference from def box

Richard L. Halpert richard.halpert at mail.mcgill.ca
Wed Apr 9 16:47:39 EDT 2008


Yes, what you need to do is insert an assignment statement from ref to a
local variable, then print the local variable.  You cannot directly pass a
field ref as an argument.

-Rich

On Wed, Apr 9, 2008 at 1:31 PM, Jimmy <myxlinux at hotmail.com> wrote:

>  Thank you all.
>
> If I really want to grab the value of a field in an object, what should I
> do?
>
> For example, like the statement in the previous email:
>
> *$r0 = new MyTestClass
>
> *And the definition of MyTestClass is:
> class MyTestClass{
> int field1;
> }
>
> I want to get someting like $r0.field1 in the run-time, which means I have to
> insert print statement with $r0.field1 as parameter.
>
> My code is as follows,
>
> public void dumpFieldValues(ValueBox vb, Stmt stmt, Chain units){
>  Value var = vb.getValue();
> 	Type type = var.getType();
> 	if(type.toString().equals("MyTestClass")){
> 	SootClass sClass = soot.SootResolver.v().resolveClass(type.toString(), SootClass.SIGNATURES);
> 	SootField sField = sClass.getField("field1");
> 	SootFieldRef sFieldRef = sField.makeRef();
> 	InstanceFieldRef ref = Jimple.v().newInstanceFieldRef(var, sFieldRef);
> 	SootMethod toCall = Scene.v().getMethod("<instrument.MyInstrumentation: void printIntField(int)>");
>  InvokeStmt toAdd = Jimple.v().newInvokeStmt(Jimple.v().newStaticInvokeExpr(toCall.makeRef(), ref));
>  units.insertAfter(toAdd, stmt);
> 	}
> }
>
> but it throws exception on the line:
> "InvokeStmt toAdd = Jimple.v().newInvokeStmt(Jimple.v().newStaticInvokeExpr(toCall.makeRef(), ref));"
>
> The exception is:
> Exception in thread "main" java.lang.RuntimeException: Box VB(null) cannot
> contain value: $r0.<perturb.MyTestClass: int field1>(class
> soot.jimple.internal.JInstanceFieldRef)
>     at soot.AbstractValueBox.setValue(AbstractValueBox.java:42)
>     at soot.jimple.internal.ImmediateBox.<init>(ImmediateBox.java:40)
>     at soot.jimple.Jimple.newImmediateBox(Jimple.java:861)
>     at
> soot.jimple.internal.JStaticInvokeExpr.<init>(JStaticInvokeExpr.java:45)
>     at soot.jimple.Jimple.newStaticInvokeExpr(Jimple.java:514)
> .....
>
>
> Is it the reason that "ref" and "int" are not compatible? Can anyone help
> me out? Thanks.
>
>
> Jimmy
>
>
>
> > Date: Wed, 9 Apr 2008 22:00:35 +0200
> > From: eric.bodden at mail.mcgill.ca
> > To: soot-list at sable.mcgill.ca
> > Subject: Re: [Soot-list] How to access/dump the content of a object
> reference from def box
>
> >
> > Hi all.
> >
> > > >From the type's fully qualified path name, you can create the
> SootClass
> > > using the SootResolver method:
> > >
> > > public SootClass resolveClassAndSupportClasses(String className)
> >
> > IMHO actually the default way is to just consult the Scene to get the
> > right class. This should be faster.
> >
> > Eric
> >
> > --
> > Eric Bodden
> > Sable Research Group
> > McGill University, Montréal, Canada
> > _______________________________________________
> > Soot-list mailing list
> > Soot-list at sable.mcgill.ca
> > http://mailman.cs.mcgill.ca/mailman/listinfo/soot-list
>
> ------------------------------
> Going green? See the top 12 foods to eat organic.<http://green.msn.com/galleries/photos/photos.aspx?gid=164&ocid=T003MSN51N1653A>
>
> _______________________________________________
> Soot-list mailing list
> Soot-list at sable.mcgill.ca
> http://mailman.cs.mcgill.ca/mailman/listinfo/soot-list
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mailman.CS.McGill.CA/pipermail/soot-list/attachments/20080409/908da01a/attachment.htm


More information about the Soot-list mailing list