[Soot-list] ifStmt transformation
Marc-André Laverdière-Papineau
marc-andre.laverdiere-papineau at polymtl.ca
Fri May 24 12:16:39 EDT 2013
Hello,
I think you should read a bit on the Jimple syntax. It is not as simple
as what you have been writing.
http://www.sable.mcgill.ca/publications/techreports/#report4
Marc-André Laverdière-Papineau
Doctorant - PhD Candidate
On 20/05/13 04:23 AM, Zeinab Lashkaripour wrote:
> 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 <mailto: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 <mailto:berber at tzi.de>>
>> *To:* Zeinab Lashkaripour <lashkaripour at yahoo.com
>> <mailto:lashkaripour at yahoo.com>>
>> *Cc:* "soot-list at sable.mcgill.ca <mailto:soot-list at sable.mcgill.ca>"
>> <soot-list at sable.mcgill.ca <mailto: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 <mailto: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 <mailto:Soot-list at sable.mcgill.ca>
>>> http://mailman.cs.mcgill.ca/mailman/listinfo/soot-list
>>
>>
>>
>
>
>
>
>
> _______________________________________________
> Soot-list mailing list
> Soot-list at sable.mcgill.ca
> http://mailman.cs.mcgill.ca/mailman/listinfo/soot-list
>
More information about the Soot-list
mailing list