[Soot-list] Traverse a CFG based on a given test case

Steven Arzt steven.arzt at cased.de
Thu Jun 12 08:56:14 EDT 2014


You can try the following sequence of existing transformers in Soot:

         CopyPropagator.v().transform(jBody);
         ConditionalBranchFolder.v().transform(jBody);
         UnreachableCodeEliminator.v().transform(jBody);

This should at least take care of the simple cases.

Am 11.06.2014 18:09, schrieb Dacong Yan:
> I am not aware of anything that you can use directly. Perhaps others
> who are more familiar with the code base can help you with that.
> 
> One example you can refer to is
> (https://github.com/Sable/soot/blob/6ece52bdb193aa95180fff8838f14c63cf89cda3/src/soot/dava/toolkits/base/AST/structuredAnalysis/CP.java).
> I have never read the code because I just found it by searching
> "ConstantPropagation" on github.
> 
> Once you have a solution for constant propagation, you can use that
> info to find and ignore dead code (e.g., some branches are no longer
> feasible) as you traverse CFG. In other words, you don't have to
> create explicitly a new CFG with unreachable code removed.
> 
> On Wed, Jun 11, 2014 at 11:56 AM, dingsun <xyz031702 at hotmail.com> 
> wrote:
>> Hi Yan,
>> 
>> Many thanks for the suggestion!
>> 
>> But shall I know if there is any implementation in Soot to handle this 
>> issue?
>> 
>> Best regards,
>> Ding Sun
>> 
>>> On 2014年6月11日, at 23:51, "Dacong Yan" <tonywinslow1986 at gmail.com> 
>>> wrote:
>>> 
>>> Hi Ding,
>>> 
>>> I think this paper might help you solve the problem:
>>>  Constant propagation with conditional branches
>>> (http://dl.acm.org/citation.cfm?id=103136)
>>> 
>>> Thanks,
>>> Tony
>>> 
>>>> On Wed, Jun 11, 2014 at 6:22 AM, dingsun <xyz031702 at hotmail.com> 
>>>> wrote:
>>>> Hi All,
>>>> 
>>>> If I have a CFG generated by Soot and a test case, is it possible to
>>>> traverse the branches that are accessible by that test case?
>>>> 
>>>> For example, if there is a simple function:
>>>> 
>>>> /*n1*/ void fun(int a, int b){
>>>> /*n2*/   if(a>1 && b>3){
>>>> /*n3*/      System.out.println("hello123");
>>>>            }
>>>> /*n4*/      System.out.println("hello456");
>>>>           }
>>>> 
>>>> And a given test case:  a=6, b=7,
>>>> 
>>>> is it possible to use this test case to "guide" Soot to traverse the 
>>>> path:
>>>> (n1, n2, n3, n4)
>>>> is it possible to use this test case to "guide" Soot to avoid 
>>>> traversing the
>>>> path (n1, n2, n4)
>>>> 
>>>> 
>>>> Thanks a lot!
>>>> 
>>>> Best regards,
>>>> Ding Sun
>>>> 
>>>> 
>>>> _______________________________________________
>>>> Soot-list mailing list
>>>> Soot-list at CS.McGill.CA
>>>> https://mailman.CS.McGill.CA/mailman/listinfo/soot-list
>>> 
>>> 
>>> 
>>> --
>>> Dacong (Tony) Yan
>>> Ph.D. Student
>>> Computer Science and Engineering
>>> The Ohio State University, Columbus
>>> http://www.cse.ohio-state.edu/~yan
-------------- next part --------------
An embedded and charset-unspecified text was scrubbed...
Name: pubkey.asc
Url: http://mailman.CS.McGill.CA/pipermail/soot-list/attachments/20140612/d5e51d55/attachment-0001.asc 


More information about the Soot-list mailing list