Advertisement
Guest User

Untitled

a guest
Jul 12th, 2013
17
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.78 KB | None | 0 0
  1. /**
  2.     THE ANALYSIS PROGRAM
  3. */
  4.  
  5. import java.util.*;
  6. import soot.*;
  7. import soot.jimple.*;
  8. import soot.util.*;
  9.  
  10. public class FooTest extends BodyTransformer {
  11.   public final static void main(String[] args) {
  12.     Pack jtp = PackManager.v().getPack("jtp");
  13.     jtp.add(new Transform("jtp.foo", new FooTest()));
  14.     soot.Main.main(args);
  15.   }
  16.  
  17.   protected void internalTransform(Body body, String phase, Map options) {
  18.     SootMethod method = body.getMethod();
  19.     System.out.println("=== " + method);
  20.     System.out.println("Locals");
  21.  
  22.     Chain lcls = body.getLocals();
  23.     Iterator localIt = lcls.snapshotIterator();
  24.     List<Local> locals = new LinkedList<Local>();
  25.     while(localIt.hasNext()) {
  26.       Local local = (Local) localIt.next();
  27.       locals.add(local);
  28.       System.out.println("  " + locals.indexOf(local) + ":" + local.toString());
  29.     }
  30.  
  31.     System.out.println("Statements");
  32.  
  33.     Chain units = body.getUnits();
  34.     Iterator stmtIt = units.snapshotIterator();
  35.  
  36.     while(stmtIt.hasNext()) {
  37.       Stmt stmt = (Stmt)stmtIt.next();
  38.  
  39.       System.out.println("  " + stmt.toString());
  40.       List<ValueBox> vboxes = stmt.getUseAndDefBoxes();
  41.       for(ValueBox vbox : vboxes) {
  42.         Value v = vbox.getValue();
  43.         if(v instanceof Local) {
  44.           Local l = (Local) v;
  45.           System.out.println("    " + locals.indexOf(l) + ":" + l.toString() );
  46.         }
  47.       }
  48.     }
  49.   }
  50. }
  51.  
  52. /**
  53.     THE TEST
  54. */
  55.  
  56. import java.util.*;
  57.  
  58. public class Foo {
  59.  
  60.   public static void main(String[] args) {
  61.     // Block 1
  62.     {
  63.     String x = "hello";
  64.     System.out.println(x);
  65.     }
  66.  
  67.     // Block 2
  68.     {
  69.     char x = 'a';
  70.     System.out.println(x);
  71.     }
  72.  
  73.     // Block 3
  74.     for (int x = 0; x < 10; x++) {
  75.     System.out.println(x);
  76.     }
  77.   }
  78.  
  79. }
  80.  
  81. /**
  82.     THE OUTPUT
  83. */
  84.  
  85. Transforming Foo...
  86. === <Foo: void <init>()>
  87. Locals
  88.   0:this
  89. Statements
  90.   this := @this: Foo
  91.     0:this
  92.   specialinvoke this.<java.lang.Object: void <init>()>()
  93.     0:this
  94.   return
  95. === <Foo: void main(java.lang.String[])>
  96. Locals
  97.   0:args
  98.   1:x
  99.   2:$r0
  100.   3:x
  101.   4:x
  102. Statements
  103.   args := @parameter0: java.lang.String[]
  104.     0:args
  105.   x = "hello"
  106.     1:x
  107.   $r0 = <java.lang.System: java.io.PrintStream out>
  108.     2:$r0
  109.   virtualinvoke $r0.<java.io.PrintStream: void println(java.lang.String)>(x)
  110.     2:$r0
  111.     1:x
  112.   x = 97
  113.     3:x
  114.   $r0 = <java.lang.System: java.io.PrintStream out>
  115.     2:$r0
  116.   virtualinvoke $r0.<java.io.PrintStream: void println(char)>(x)
  117.     2:$r0
  118.     3:x
  119.   x = 0
  120.     4:x
  121.   if x >= 10 goto return
  122.     4:x
  123.   $r0 = <java.lang.System: java.io.PrintStream out>
  124.     2:$r0
  125.   virtualinvoke $r0.<java.io.PrintStream: void println(int)>(x)
  126.     2:$r0
  127.     4:x
  128.   x = x + 1
  129.     4:x
  130.     4:x
  131.   goto [?= (branch)]
  132.   return
  133. Writing to sootOutput/Foo.jimple
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement