[Soot-list] soot

Raghav Karol raghav.karol at gmail.com
Mon Sep 18 10:07:53 EDT 2006


On 9/18/06, Peng Li <lipeng360 at gmail.com> wrote:
>
> Hi everyone,
> I am using soot to write a very simple program to translate a .class file to
> a .jimple file.But because this is my first soot program, I have been
> stucked for almost 1 week. Could you give me some help?
>
> The purpose: write a program to translate a .class file to a .jimple file
> I am using eclipse plug-in. I just install the eclipse plugin as the
> instruction on the soot website and don't do any setting on my eclipse. I
> don't use any command line to run soot.

The eclipse plugin is not required to write a program to translate a
class file to a jimple file. You only need, soot, jasmin and polyglot
jars/classes in your classpath.

Using the eclipse plugin you can easily convert a file to jimple from
inside eclipse; a soot option should appear when you right click on a
file in the package explorer in eclipse if the plugin installed
correctly.

> code:
>
>
> import soot.*;
> import soot.options.Options;
> import java.io.*;
> public class ClassToJimple {
>  public static void main(String[] args) throws IOException
>  {
>   soot.options.Options.v().set_app(true);
>
> Scene.v().setSootClassPath("C:/workspace/translator;C:/j2sdk1.4.2_12/jre/lib/rt.jar");
>   SootClass c =
> Scene.v().loadClassAndSupport("helloworld");
>   String fileName = SourceLocator.v().getFileNameFor(c,
> Options.output_format_jimple);
>   OutputStream streamOut = new FileOutputStream(fileName);
>      PrintWriter writerOut = new PrintWriter(new
> OutputStreamWriter(streamOut));
>
>      Printer.v().printTo(c, writerOut); //this line makes the error
>      writerOut.flush();
>      streamOut.close();
>  }
> }


> I got the following error,
> Exception in thread "main" java.lang.RuntimeException: method <init> has no
> active body!
>  at soot.Printer.printTo(Printer.java:206)
>  at ClassToJimple.main(ClassToJimple.java :20)
I use the function given below to retrieve Soot bodies for the
application classes. As far as I remember something like this occurs
when you invoke Soot.

       private static void retrieveAllBodies() {
               Iterator clIt = Scene.v().getApplicationClasses();
               while (clIt.hasNext()) {
                       SootClass cl = (SootClass) clIt.next();
                       Iterator methodIt = cl.methodIterator();
                       while (methodIt.hasNext()) {
                               SootMethod m = (SootMethod) methodIt.next();

                               if (m.isConcrete()) {
                                       m.retrieveActiveBody();
                               }
                       }
               }
       }

> Thank you very much for your help and looking forward to hearing from you.
>
> Cheers
>
> P
>
> _______________________________________________
> Soot-list mailing list
> Soot-list at sable.mcgill.ca
> http://mailman.cs.mcgill.ca/mailman/listinfo/soot-list
>
>
>


-- 
Raghav

MSc., Student
Informatics and Mathematical Modeling
Technical University of Denmark

+45 606 31 639


More information about the Soot-list mailing list