[Soot-list] Transforming java library classes
Chris Pickett
chris.pickett at mail.mcgill.ca
Mon Feb 25 18:39:02 EST 2008
Glad it works. This time, you can have your cake and eat it:
$ java -X
...
-Xbootclasspath/p:<directories and zip/jar files separated by :>
prepend in front of bootstrap class path
Also, you might like to disassemble things with Soot, just tell it to
output Jasmin.
Cheers,
Chris
Khilan Gudka wrote:
> Hi,
>
> I re-created rt.jar replacing java.lang.Math with my copy and it
> works. It would've been nice if it could've pulled the local version
> before searching in rt.jar but hey, it's working!
>
> Khilan
>
> On 25/02/2008, Khilan Gudka <khilan.gudka at imperial.ac.uk> wrote:
>> Hi Chris,
>>
>> Thanks for your reply. I'm disassembling the class files that Soot
>> outputs. I executed:
>>
>> javap -c -classpath . java.lang.Math
>>
>> in the sootOutput directory which seems to be showing the original
>> java.lang.Math, however if I use jad (http://www.kpdus.com/jad.html)
>> then it shows the file generated by Soot with the methods added to it!
>>
>> It appears that for sdk classes, java does not look in locations other
>> than rt.jar which seems bizarre. If I prepend . to the classpath then
>> it should look for java.lang.Math there first (and hence find the
>> updated file) but that doesn't seem to be happening as when I execute
>> the program, java complains that it cannot find a method in
>> java.lang.Math.
>>
>>
>> Khilan
>>
>> On 25/02/2008, Chris Pickett <chris.pickett at mail.mcgill.ca> wrote:
>> > Hi Khilan,
>> >
>> > Sorry for your troubles. I am pretty sure it is possible to do what you
>> > want to do. I have done it with GNU Classpath many times, but not with
>> > Sun's or IBM's rt.jar.
>> >
>> > How do you know the method hasn't been added? Are you disassembling the
>> > output from Soot? It won't get included back in rt.jar unless you put
>> > it there manually.
>> >
>> > You could try specifying a -cp flag to Soot with the path to each JDK
>> > .jar file that you need following it. (We needed jsse.jar, jce.jar, and
>> > rt.jar most recently for a whole-program analysis using Richard's lock
>> > allocator. I don't remember why, but that's what the script says.)
>> >
>> > If that fails, if you attach your full source code and your full command
>> > line and the relevant details of your environment (CLASSPATH, JAVA_HOME,
>> > which VM, etc.), somebody might be able to help you by trying to
>> > reproduce the issue exactly. Not necessarily me.....
>> >
>> >
>> > Chris
>> >
>> > Khilan Gudka wrote:
>> > > Dear Chris,
>> > >
>> > > Unfortunately that didn't work. This is really weird, as soot is
>> > > clearly adding the methods. Debug output I am generating:
>> > >
>> > > Adding cos96 to java.lang.Math
>> > > Successfully added? true.
>> > >
>> > > The true value is obtained by doing a contains check on the list
>> > > returned by SootClass.getMethods().
>> > >
>> > > Khilan
>> > >
>> > >
>> > >
>> > > On 25/02/2008, Chris Pickett <chris.pickett at mail.mcgill.ca> wrote:
>> > >> Try adding --app. Does it work?
>> > >>
>> > >>
>> > >> Khilan Gudka wrote:
>> > >> > Hi Chris,
>> > >> >
>> > >> > Sorry about that. Here is the command line I am using:
>> > >> >
>> > >> > -p cg.spark enabled:true -w -f c -include-all MyClass java.lang.Math
>> > >> >
>> > >> > and the relevant source code for adding the new method to java.lang.Math is:
>> > >> >
>> > >> > SootMethod mPrime = new SootMethod(mPrimeName,
>> > >> > m.getParameterTypes(), m.getReturnType(), m.getModifiers(),
>> > >> > m.getExceptions());
>> > >> > SootClass c = m.getDeclaringClass();
>> > >> > c.addMethod(mPrime);
>> > >> >
>> > >> > Thanks,
>> > >> > Khilan
>> > >> >
>> > >> > On 25/02/2008, Chris Pickett <chris.pickett at mail.mcgill.ca> wrote:
>> > >> >> Hi Khilan,
>> > >> >>
>> > >> >> It's hard for people to help you if you don't provide enough
>> > >> >> information. (In general, err on the side of providing too much.)
>> > >> >>
>> > >> >> Please post your exact command-line and source code.
>> > >> >>
>> > >> >>
>> > >> >> Chris
>> > >> >>
>> > >> >>
>> > >> >> Khilan Gudka wrote:
>> > >> >> > Dear Eric,
>> > >> >> >
>> > >> >> > I tried as per your suggestion but still no luck.
>> > >> >> >
>> > >> >> > Khilan
>> > >> >> >
>> > >> >> > On 25/02/2008, Eric Bodden <eric.bodden at mail.mcgill.ca> wrote:
>> > >> >> >> Hi, Khilan.
>> > >> >> >>
>> > >> >> >> Did you use the -include-all option?
>> > >> >> >>
>> > >> >> >> See http://www.sable.mcgill.ca/soot/tutorial/usage/index.html
>> > >> >> >>
>> > >> >> >> Eric
>> > >> >> >>
>> > >> >> >>
>> > >> >> >> On 25/02/2008, Khilan Gudka <khilan.gudka at imperial.ac.uk> wrote:
>> > >> >> >> > Dear All,
>> > >> >> >> >
>> > >> >> >> > I would like to be able to modify the java sdk library classes by
>> > >> >> >> > adding methods to them. At present, I pass the java library class to
>> > >> >> >> > be modified as one of the application classes. Soot generates the
>> > >> >> >> > class files for these classes but they don't include the methods that
>> > >> >> >> > I added to them using SootClass.addMethod.
>> > >> >> >> >
>> > >> >> >> > Is this the right way to go about modifying java sdk classes?
>> > >> >> >> >
>> > >> >> >> > Thanks,
>> > >> >> >> > Khilan
>> > >> >> >>
>> > >> >> >>> _______________________________________________
>> > >> >> >> > Soot-list mailing list
>> > >> >> >> > Soot-list at sable.mcgill.ca
>> > >> >> >> > http://mailman.cs.mcgill.ca/mailman/listinfo/soot-list
>> > >> >> >> >
>> > >> >> >>
>> > >> >> >>
>> > >> >> >>
>> > >> >> >> --
>> > >> >> >> 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
>> > >> >>
>> > >>
>> >
>>
More information about the Soot-list
mailing list