[Soot-list] Transforming java library classes

Khilan Gudka khilan.gudka at imperial.ac.uk
Mon Feb 25 19:24:22 EST 2008


Thanks ever so much.

One final important note for those that try this is to put the
modified java files in their own directory because the java boot class
loader attempts to load all classes it finds in the boot class path.
My final command line:

java -Xbootclasspath/p:modified/ MyClass

Thanks,
Khilan

On 25/02/2008, Chris Pickett <chris.pickett at mail.mcgill.ca> wrote:
> 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