Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /**
- THE ANALYSIS PROGRAM
- */
- import java.util.*;
- import soot.*;
- import soot.jimple.*;
- import soot.util.*;
- public class FooTest extends BodyTransformer {
- public final static void main(String[] args) {
- Pack jtp = PackManager.v().getPack("jtp");
- jtp.add(new Transform("jtp.foo", new FooTest()));
- soot.Main.main(args);
- }
- protected void internalTransform(Body body, String phase, Map options) {
- SootMethod method = body.getMethod();
- System.out.println("=== " + method);
- System.out.println("Locals");
- Chain lcls = body.getLocals();
- Iterator localIt = lcls.snapshotIterator();
- List<Local> locals = new LinkedList<Local>();
- while(localIt.hasNext()) {
- Local local = (Local) localIt.next();
- locals.add(local);
- System.out.println(" " + locals.indexOf(local) + ":" + local.toString());
- }
- System.out.println("Statements");
- Chain units = body.getUnits();
- Iterator stmtIt = units.snapshotIterator();
- while(stmtIt.hasNext()) {
- Stmt stmt = (Stmt)stmtIt.next();
- System.out.println(" " + stmt.toString());
- List<ValueBox> vboxes = stmt.getUseAndDefBoxes();
- for(ValueBox vbox : vboxes) {
- Value v = vbox.getValue();
- if(v instanceof Local) {
- Local l = (Local) v;
- System.out.println(" " + locals.indexOf(l) + ":" + l.toString() );
- }
- }
- }
- }
- }
- /**
- THE TEST
- */
- import java.util.*;
- public class Foo {
- public static void main(String[] args) {
- // Block 1
- {
- String x = "hello";
- System.out.println(x);
- }
- // Block 2
- {
- char x = 'a';
- System.out.println(x);
- }
- // Block 3
- for (int x = 0; x < 10; x++) {
- System.out.println(x);
- }
- }
- }
- /**
- THE OUTPUT
- */
- Transforming Foo...
- === <Foo: void <init>()>
- Locals
- 0:this
- Statements
- this := @this: Foo
- 0:this
- specialinvoke this.<java.lang.Object: void <init>()>()
- 0:this
- return
- === <Foo: void main(java.lang.String[])>
- Locals
- 0:args
- 1:x
- 2:$r0
- 3:x
- 4:x
- Statements
- args := @parameter0: java.lang.String[]
- 0:args
- x = "hello"
- 1:x
- $r0 = <java.lang.System: java.io.PrintStream out>
- 2:$r0
- virtualinvoke $r0.<java.io.PrintStream: void println(java.lang.String)>(x)
- 2:$r0
- 1:x
- x = 97
- 3:x
- $r0 = <java.lang.System: java.io.PrintStream out>
- 2:$r0
- virtualinvoke $r0.<java.io.PrintStream: void println(char)>(x)
- 2:$r0
- 3:x
- x = 0
- 4:x
- if x >= 10 goto return
- 4:x
- $r0 = <java.lang.System: java.io.PrintStream out>
- 2:$r0
- virtualinvoke $r0.<java.io.PrintStream: void println(int)>(x)
- 2:$r0
- 4:x
- x = x + 1
- 4:x
- 4:x
- goto [?= (branch)]
- return
- Writing to sootOutput/Foo.jimple
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement