[Soot-list] How to Instrument the apk file before the callsite of doInBackground?

Steven Arzt Steven.Arzt at cased.de
Mon Jun 16 07:51:48 EDT 2014


Hi Jin,

 

The statement you are interested in is not an InvokeStmt, but an AssignStmt that contains an InvokeExpr on ist right-hand side.

 

Best regards,

  Steven

 

Von: soot-list-bounces at CS.McGill.CA [mailto:soot-list-bounces at CS.McGill.CA] Im Auftrag von Jin Li
Gesendet: Montag, 16. Juni 2014 12:53
An: soot-list at CS.McGill.CA
Betreff: [Soot-list] How to Instrument the apk file before the callsite of doInBackground?

 

Hi All,

I read the jimple file of my AsyncTask class,  there are two doInBackground() method:

protected transient android.graphics.Bitmap doInBackground(java.lang.String[])
    {
        com.rapptors.jamood.DownloadImageTask $r0;
        java.lang.String[] $r1;
        java.lang.Exception $r2;
        java.io.InputStream $r3;
        java.lang.String $r4, $r6;
        java.lang.StringBuilder $r5;
        int $i1;
        java.net.URL $r8;
        android.graphics.Bitmap $r9;

        $r0 := @this: com.rapptors.jamood.DownloadImageTask;
        $r1 := @parameter0: java.lang.String[];
        $r4 = $r1[0];
        $r5 = new java.lang.StringBuilder;
        specialinvoke $r5.<java.lang.StringBuilder: void <init>(java.lang.String)>("tid is ");
        $i1 = staticinvoke <android.os.Process: int myTid()>();
        $r5 = virtualinvoke $r5.<java.lang.StringBuilder: java.lang.StringBuilder append(int)>($i1);
        $r5 = virtualinvoke $r5.<java.lang.StringBuilder: java.lang.StringBuilder append(java.lang.String)>(" pid is ");
        $i1 = staticinvoke <android.os.Process: int myPid()>();
        $r5 = virtualinvoke $r5.<java.lang.StringBuilder: java.lang.StringBuilder append(int)>($i1);
        $r6 = virtualinvoke $r5.<java.lang.StringBuilder: java.lang.String toString()>();
        staticinvoke <android.util.Log: int d(java.lang.String,java.lang.String)>("DownloadImage", $r6);
        $r8 = new java.net.URL;

     label1:
        specialinvoke $r8.<java.net.URL: void <init>(java.lang.String)>($r4);
        $r3 = virtualinvoke $r8.<java.net.URL: java.io.InputStream openStream()>();
        $r9 = staticinvoke <android.graphics.BitmapFactory: android.graphics.Bitmap decodeStream(java.io.InputStream)>($r3);

     label2:
        return $r9;

     label3:
        $r2 := @caughtexception;
        $r6 = virtualinvoke $r2.<java.lang.Exception: java.lang.String getMessage()>();
        staticinvoke <android.util.Log: int e(java.lang.String,java.lang.String)>("Error", $r6);
        virtualinvoke $r2.<java.lang.Exception: void printStackTrace()>();
        staticinvoke <ThreadHelper: void stopThreadProfile()>();
        return null;

        catch java.lang.Exception from label1 to label2 with label3;
    }

    protected transient volatile java.lang.Object doInBackground(java.lang.Object[])
    {
        com.rapptors.jamood.DownloadImageTask $r0;
        java.lang.Object[] $r1;
        android.graphics.Bitmap $r2;
        java.lang.String[] $r3;

        $r0 := @this: com.rapptors.jamood.DownloadImageTask;
        $r1 := @parameter0: java.lang.Object[];
        $r3 = (java.lang.String[]) $r1;
        $r2 = virtualinvoke $r0.<com.rapptors.jamood.DownloadImageTask: android.graphics.Bitmap doInBackground(java.lang.String[])>($r3);
        return $r2;
    }

But when I attempt to instrument some codes before the call site of the doInBackground, I can't find that invokeExpr (red line). My code is like this:

for(Iterator<Unit> iter = units.snapshotIterator(); iter.hasNext();) {
                final Unit u = iter.next();
                u.apply(new AbstractStmtSwitch() {
                    
                    public void caseInvokeStmt(InvokeStmt stmt) {
                        InvokeExpr invokeExpr = stmt.getInvokeExpr();    
                        SootMethod targetMethod = invokeExpr.getMethod();
                        String targetName = invokeExpr.getMethod().getName();
                        System.out.println("invoke name is "+targetName);
                        if(targetName.equals("doInBackground")){                         
                            System.out.println("instrument thread doInBackground start");                          
                        }
}

Does anybody know the reason?

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mailman.CS.McGill.CA/pipermail/soot-list/attachments/20140616/34a8f661/attachment.html 


More information about the Soot-list mailing list