[Soot-list] ifStmt transformation

Zeinab Lashkaripour lashkaripour at yahoo.com
Mon May 20 04:23:51 EDT 2013


Hi again,

Thanks for your reply Bernahard.
I thought that when using an ifStmt and specify the target it would be like below:
Before:    ..
                stement
                ..

After:      ..
               if (condition)
                statement   
    
I mean that it would not repeat the statement again in the chain. But, as I understand from your explanations it is not like that and the ifStmt is not responsible for such a thing, Is that right?


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 12:23 PM
Subject: Re: [Soot-list] ifStmt transformation
 


Hi,

a Chain is "simple" list of statements and the insertBefore operation inserts a object X before a object Y. I'm not expecting the chain to take care of gotos and so forth (if you have label0: stmt_1 in your Jimple code it will not insert a statement between the label and the statement).  
Regarding your transformation I see no problem.

Regards,
Bernahrd


Am 20.05.2013 um 09:22 schrieb Zeinab Lashkaripour <lashkaripour at yahoo.com>:

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/c6e98895/attachment-0001.html 


More information about the Soot-list mailing list