[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