[Soot-list] soot

Peng Li lipeng360 at gmail.com
Wed Oct 4 19:44:39 EDT 2006


HI
I am using soot to analyze multiple class files. The method what I am using
is to run soot.Main.main(args) multiple times and each time give different
"args"  to soot.Main.main(); . However, the first soot run is ok, the second
soot run gives me the following mistakes.

java.lang.RuntimeException: This operation requires resolving level
SIGNATURES but com.oreilly.struts.storefront.order.ShoppingCartActions is at
resolving level HIERARCHY  ("
com.oreilly.struts.storefront.order.ShoppingCartActions" is the 2nd class
name which is passed to soot.Main.main() )

The method what I am using looks very silly because it restarts soot many
time (depending on how many classes you have.). I am wondering if there are
any good ways to run soot analysis for multiple classes.  Could anyone help
me  to figure out my problem?

Thank you very much for your help.

Cheers

Peng

import soot.*;
import soot.jimple.*;
import soot.toolkits.graph.BriefUnitGraph;
import soot.util.*;
import java.util.*;

public class ReturnInstrumenter extends BodyTransformer{
    private static ReturnInstrumenter instance = new ReturnInstrumenter();
    private ReturnInstrumenter() {}

 public static ReturnInstrumenter v() { return instance; }

    public static void main(String[] args)
    {
     String[] a={"com.oreilly.struts.storefront.order.CheckoutAction"};
     String[] b={"com.oreilly.struts.storefront.order.ShoppingCartActions"};
     Scene.v
().setSootClassPath("C:/workspace/ReturnValue/sootOutput;C:/j2sdk1.4.2_12/jre/lib/rt.jar");
     PhaseOptions.v().setPhaseOption("jop", "on");
     PackManager.v().getPack("jtp").add(new Transform("jtp.instrumenter",
ReturnInstrumenter.v()));
         Scene.v().addBasicClass("java.io.PrintStream",SootClass.SIGNATURES
);
        soot.Main.main(a);
        soot.Main.main(b);
    }

 protected void internalTransform(Body body, String phase, Map options) {
  BriefUnitGraph cfg=new BriefUnitGraph(body);
  SootMethod method = body.getMethod();
   System.out.println("instrumenting method : " + method.getSignature());
    Chain units = body.getUnits();
  Iterator stmtIt = units.snapshotIterator();
  while(stmtIt.hasNext())
  {
   Stmt stmt = (Stmt) stmtIt.next();
  if(stmt instanceof ReturnStmt)
   {

     List predlist=cfg.getPredsOf(stmt);
    Stmt invokstmt = (Stmt) predlist.get(0);
    InvokeExpr invokexpr = invokstmt.getInvokeExpr();
    System.out.println(invokexpr.getArg(0));

   } }}



Output

Soot started on Thu Oct 05 07:43:03 CST 2006
Transforming com.oreilly.struts.storefront.order.CheckoutAction...
instrumenting method : <com.oreilly.struts.storefront.order.CheckoutAction:
void <init>()>
instrumenting method : <com.oreilly.struts.storefront.order.CheckoutAction:
org.apache.struts.action.ActionForward execute(
org.apache.struts.action.ActionMapping,org.apache.struts.action.ActionForm,
javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse
)>
"Login"
"Success"
Writing to
sootOutput\com\oreilly\struts\storefront\order\CheckoutAction.class
Soot finished on Thu Oct 05 07:43:04 CST 2006
Soot has run for 0 min. 1 sec.
Soot started on Thu Oct 05 07:43:04 CST 2006
java.lang.RuntimeException: This operation requires resolving level
SIGNATURES but com.oreilly.struts.storefront.order.ShoppingCartActions is at
resolving level HIERARCHY
 at soot.SootClass.checkLevel(SootClass.java:126)
 at soot.SootClass.addMethod(SootClass.java:581)
 at soot.coffi.Util.resolveFromClassFile(Util.java:252)
 at soot.CoffiClassSource.resolve(CoffiClassSource.java:37)
 at soot.SootResolver.bringToHierarchy(SootResolver.java:148)
 at soot.SootResolver.bringToSignatures(SootResolver.java:172)
 at soot.SootResolver.processResolveWorklist(SootResolver.java:104)
 at soot.SootResolver.resolveClass(SootResolver.java:89)
 at soot.Scene.loadClass(Scene.java:329)
 at soot.Scene.loadClassAndSupport(Scene.java:314)
 at soot.Scene.loadNecessaryClass(Scene.java:861)
 at soot.Scene.loadNecessaryClasses(Scene.java:880)
 at soot.Main.run(Main.java:177)
 at soot.Main.main(Main.java:153)
 at ReturnInstrumenter.main(ReturnInstrumenter.java:29)
Exception in thread "main"
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mailman.CS.McGill.CA/pipermail/soot-list/attachments/20061005/b4d5c541/attachment.htm


More information about the Soot-list mailing list