2

I have the below Java program

public class tester3 {
    int bar1(int x) {
        int a=10;
        System.out.println(x+" "+a);
        return 0;
    }
}

I have a driver code as below

        Options.v().setPhaseOption("jb", "use-original-names:true");
        Pack jtp=PackManager.v().getPack("jtp");
        jtp.add(new Transform("jtp.instrumenter", new ReachingDefinitionWrapper()));
        SootResolver.v().resolveClass("java.lang.CloneNotSupportedException", SootClass.SIGNATURES);
        Options.v().set_output_format(Options.output_format_jimple);

It generates the following Jimple code

int bar1(int)
    {
        Assignment2.tester3 this;
        int x;
        byte a;
        java.lang.StringBuilder $r0;
        java.io.PrintStream $r1;
        java.lang.String $r2, $r3;

        this := @this: Assignment2.tester3;
        x := @parameter0: int;
        a = 10;
        $r1 = <java.lang.System: java.io.PrintStream out>;
        $r0 = new java.lang.StringBuilder;
        $r2 = staticinvoke <java.lang.String: java.lang.String valueOf(int)>(x);
        specialinvoke $r0.<java.lang.StringBuilder: void <init>(java.lang.String)>($r2);
        $r0 = virtualinvoke $r0.<java.lang.StringBuilder: java.lang.StringBuilder append(java.lang.String)>(" ");
        $r0 = virtualinvoke $r0.<java.lang.StringBuilder: java.lang.StringBuilder append(int)>(a);
        $r3 = virtualinvoke $r0.<java.lang.StringBuilder: java.lang.String toString()>();
        virtualinvoke $r1.<java.io.PrintStream: void println(java.lang.String)>($r3);
        return 0;
    }

When we process System.out.println(x+" "+a); , I need to retrive the varibales x and y. But as jimple splits the statement into multiple lines, I'm not able to get x and y directly from the println statement. How can I achieve this?.

srccode
  • 635
  • 3
  • 14

0 Answers0