[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