[Soot-list] Adding an attribute to a line of code

saswat78 at gmail.com saswat78 at gmail.com
Sat May 22 15:05:17 EDT 2010


Hello,

I think when Soot outputs Jasmin code, it does not know the offset where  
bytecode corresponding to a Unit will be placed in the class file. It is  
only after Jasmin assembles, bytecodes are known. So I guess it is not  
possible to map a label, which is internal to soot, to bytecode offset.

But I can think of a solution that uses the feature of embedding line  
numbers in the class file to indirectly infer the mapping from tags  
attached to Units to their corresponding tags.

1. Add a Tag (eg, IndexTag) to each Unit that holds the statement's index  
in the method body. This will automatically generate a mapping from a  
Unit's label to its index in the class file.
2. When outputing Jasmin code for a Unit, output the unit's index as its  
line number using ".line" jasmin primitive.

Above should enable you to map a bytecode to its index (using the Line  
number table in the class file), and then the index to its label, and then  
the label to its tag.

To do the second step, you will have to edit soot/baf/JasminClass.jave to  
add following two lines right before where the jasmin code for a unit is  
output. It is around line 250 in that file.

IndexTag lnTag = (IndexTag) s.getTag("IndexTag");
if(lnTag != null) emit(".line " + lnTag.getLineNumber());

Note that soot does not currently output line numbers in jasmin code. If it  
did, you could have used the LineNumberTag's to encode the index instead of  
line number. I think soot should output line number tags using .line  
primitives by default.

Saswat


On May 21, 2010 12:49pm, Arie Zilberstein <arie.zilberstein at gmail
.com> wrote:
> Hi Eric,



> Thanks for your help. From what I've seen, Unit-level tags are aggregated

> into a method-level attribute. This attribute contains a "map" from labels

> to each tag's byte array representation. But how may an outside consumer

> make use of those labels? In my example, I require that ASM processes the

> produced classfile.



> The problem is that, I could not find the correspondence between the label

> number and the bytecode offset... It would've been perfect if the tag

> contained the bytecode offset of the instruction, but I think that this  
> data

> is not available in Jasmin at the moment of code emission.



> Here's an example label that Soot produced:



> %label0%AAA=%label1%AAA=%label2%AAA=



> Thanks,

> Arie



> -----Original Message-----

> From: eric.bodden at googlemail.com [mailto:eric.bodden at googlemail.com] On

> Behalf Of Eric Bodden

> Sent: Friday, May 21, 2010 8:23 AM

> To: Arie Zilberstein

> Cc: soot-list at sable.mcgill.ca

> Subject: Re: [Soot-list] Adding an attribute to a line of code



> Hi Arie.



> If I remember correctly then there is o such thing as a unit-level

> attribute in bytecode. There are only method-level attributes that can

> refer to units via instruction offsets. I believe that this is what

> the aggregaters are meant for: convert a list of unit-level tags to a

> single method-level tag that encodes the unit-to-attribute relation

> correctly. I think there should be some code in Soot that already does

> that for certain attributes.



> If you have suggestions on how to make this any easier, please let us

> know. This is definitely one of the areas of Soot that I think may

> still benefit from improvements.



> Happy tagging,

> 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 21 May 2010 02:33, Arie Zilberstein arie.zilberstein at gmail.com> wrote:

> > Hi,

> > I'm having a lot of trouble adding an attribute to a line of code.

> > I attach my own custom Tag to a (Jimple) Unit but that tag never gets

> > translated into a Java attribute.

> > It seems that Soot only outputs field, class or method-level  
> attributes. A

> > tag on a Unit will at best get aggregated by a TagAggregator and will be

> > lost; instead a method-level attribute will be created.

> > Am I doing something wrong? I analyzed the code thoroughly and could not

> > find the way.

> > I even found a tutorial

> > (http://www.sable.mcgill.ca/soot/tutorial/tagclass/index.html) but it

> failed

> > in the same way. I'm using the SVN trunk version of soot.

> > Thanks,

> > Arie

> > _______________________________________________

> > Soot-list mailing list

> > Soot-list at sable.mcgill.ca

> > http://mailman.cs.mcgill.ca/mailman/listinfo/soot-list

> >

> >



> _______________________________________________

> 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/20100522/2a956491/attachment.html 


More information about the Soot-list mailing list