[Soot-list] How to get field object in Jimple code?
Sai Zhang
racezhang at gmail.com
Wed Apr 28 12:32:03 EDT 2010
Hey Eric:
Thanks for your answer.
I am sorry that I did not make it clear about my question. Propably the
sentence
"decide a2.s and a1.s are pointing to the same memory locatio" is too
misleading.
In one sentence, I am not clear about how to use Soot's API to get the
field object
in a JInstanceRef instance. Let's continue with the following example:
> //(roughly) corresponding jimple code for client code
> 1. $r1 = new A;
> 2. r2 = $r1
> 3. r2.<A: string s> = "hello";
> 4. r3 = $r1
> 5. r3.<A: string s> = "world"
Line 5, r3.<A:string s> is a JInstanceRef object (Value type), but when I
insert the following
instrumentation code for profiling:
units.insertBefore(Jimple.v().newInvokeStmt(
Jimple.v().newStaticInvokeExpr(traceCall.makeRef(),
Arrays.asList(new Value[]
{r3.<A:string s>, StringConstant.v(field.toString())}))), s);
The traceCall is a method with the following signature: (Object, String,
Object)
An exception during profiling was thrown:
(NewRep and i is the class name and field name)
Exception in thread "main" java.lang.RuntimeException: Box VB(null) cannot
contain value: $r1.<NewRep: int i>(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:433)
So I guess i use an incorrect way to get the field object.
Hope I have stated that clearly now.
thanks
-Sai
On Wed, Apr 28, 2010 at 3:17 AM, Eric Bodden <
bodden at st.informatik.tu-darmstadt.de> wrote:
> Hi.
>
> I think in general you are interested in points-to analysis or alias
> analysis.
>
> Soot has a local must-alias analysis:
>
> http://www.sable.mcgill.ca/soot/doc/soot/jimple/toolkits/pointer/LocalMustAliasAnalysis.html
>
> That can tell you whether two local variables must point to the same
> object.
>
> Eric
>
> --
> Dr. Eric Bodden
> Software Technology Group, Technische Universität Darmstadt, Germany
> Tel: +49 6151 16-5478 Fax: +49 6151 16-5410
> Mailing Address: S2|02 A209, Hochschulstraße 10, 64289 Darmstadt
>
>
>
> On 28 April 2010 01:57, Sai Zhang <racezhang at gmail.com> wrote:
> >
> > Hi all:
> >
> > I am a bit confused on how to extract "field object" from Jimple code
> (used
> > in a field-sensitive dynamic analysis).
> >
> > For instance, consider the following simple class and the corresponding
> > jimple code:
> >
> > class A {
> > Object s = "string";
> > }
> >
> > //client code:
> > A a1 = new A();
> > a1.s = "hello";
> > A a2 = a;
> > a2.s = "world"; // a2.i should be the same field as a1.i
> >
> >
> > //(roughly) corresponding jimple code for client code
> > 1. $r1 = new A;
> > 2. r2 = $r1
> > 3. r2.<A: string s> = "hello";
> > 4. r3 = $r1
> > 5. r3.<A: string s> = "world"
> >
> >
> > Is there a way to fetch the object of "A.s" (not the field reference,
> e.g.
> > SootField , SootFieldRef) from line 3 and line 5?
> >
> > For instance, could I could insert some instrumentation code after line
> 5,
> > like:
> > Tracer.record( .....r3.<A:string s> (// get the object of A.s),...);
> >
> >
> > In other words, is there anyway to decide a2.s and a1.s are pointing to
> the
> > same memory location in a dynamic analysis? In my intuition,
> > it should not be that hard, since r2 and r3 seem to share the same
> > JimpleLocal object, right? but how to get the state of "A.s" seems
> > to be a problem. Is there any good way to overcome that? or am i in a
> wrong
> > direction?
> >
> >
> > Thanks so much.
> >
> >
> > - Sai
> >
> > _______________________________________________
> > Soot-list mailing list
> > Soot-list at sable.mcgill.ca
> > http://mailman.cs.mcgill.ca/mailman/listinfo/soot-list
> >
> >
>
--
--
Sai Zhang
Computer Science & Engineering Department
University of Washington, Seattle, USA
Email: (saizhang at u.washington.edu)
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mailman.cs.mcgill.ca/pipermail/soot-list/attachments/20100428/01ccda40/attachment.html
More information about the Soot-list
mailing list