[Soot-list] ifStmt transformation

Zeinab Lashkaripour lashkaripour at yahoo.com
Mon May 20 03:22:18 EDT 2013


Hi Bernhard,

Again I should thank you for the nice explanation.
If I want to add my ifStmt before the specific Stmt and I use insertBefore is the result as I want?
if (condition)
    statement

I mean that is the Stmt not repeated again in the chain due to using insertBefore or does Soot take care of it?


Another question that I have and I would be grateful if you guided me is also related to transformation:
I process UD chains, then iterate through the CFGs of the methods I have and look for specific statements.
After finding them, I perform some processing on the UDs and depending on the results I need to transform my code.
The question I have is that depending on the result I might need to transform a statement that I have iterated through before my specific statement.
Am I able to perform my transformations?


Regards,
Zeinab


________________________________
 From: Bernhard Berger <berber at tzi.de>
To: Zeinab Lashkaripour <lashkaripour at yahoo.com> 
Cc: "soot-list at sable.mcgill.ca" <soot-list at sable.mcgill.ca> 
Sent: Monday, May 20, 2013 11:20 AM
Subject: Re: [Soot-list] ifStmt transformation
 


Hi Zeinab,

generating Jimple is not easy. You have to remember that every "line" in a Jimple file corresponds to a statement [1]. There you can see all possible subtypes of Stmt (such as an IfStmt). Inside of statements you can place Values [2]. In your case the second line in your Jimple code is a IfStmt containing an EqExpr. The EqExpr contains a Local ($z0) and an IntConstant. Theoretical you can add a InvokeExpr instead of the Local but I'm always carful because there is lots of code that expects the Jimple code to be the way it's generated by the frontend.
Labels do not exist in the memory version of Jimple. They are resolved to references to statements. Take the following pseudo Jimple code:

Stmt_1;
Stmt_2;
if x == 0 goto label0;
Stmt_3;
Label0:
Stmt_4;

After loading this code into memory the target of the IfStmt will point to Stmt4.

That's all Folks,
Bernhard

[1] http://www.sable.mcgill.ca/soot/doc/index.html?soot/jimple/Stmt.html
[2] http://www.sable.mcgill.ca/soot/doc/index.html?soot/Value.html


Am 19.05.2013 um 21:45 schrieb Zeinab Lashkaripour <lashkaripour at yahoo.com>:

Hi everyone,
>
>
>I would be grateful if some one guided me.
>
>I need to add a function call in an ifStmt before a specific statement in the chain (As below).
>(params stands for the parameters of the "fn")
>
>    if ( fn(params) )     
>
>    {
>        statement in chain.
>
>    }
>I tried to work the other way round, I know that the equivalent Jimple is like below:
>    $z0 = staticinvoke <class: boolean fn(param types)>(params);        
>    if $z0 == 0 goto label2;
>
>        statement in chain
>
>
>I tried some code but got no result, I only know how to generate the green part. 
>
>Do I need a ConditionExprBox?
>
>Can I not use the "fn" call directly in ifStmt?
>What about the label? How do I get the value of label?
>
>
>If there is anything else that I need to take care of, I would be happy to know.
>
>Thanks in advance.
>
>
>Regards,
>Zenab
>_______________________________________________
>Soot-list mailing list
>Soot-list at sable.mcgill.ca
>http://mailman.cs.mcgill.ca/mailman/listinfo/soot-list
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mailman.cs.mcgill.ca/pipermail/soot-list/attachments/20130520/2e28ad3d/attachment-0001.html 


More information about the Soot-list mailing list