基於Heros的過程間數據流分析的相關API

https://ssebuild.cased.de/nightly/soot/javadoc/

soot.jimple.toolkits.ide

ClassMain:

public classMain extends Object.

構造方法:public Main()

其他方法:public staticvoid main(String[] args)

 

ClassJimpleIFDSSolver<D,I extendsheros.InterproceduralCFG<Unit,SootMethod>>

public classJimpleIFDSSolver<D,I extendsheros.InterproceduralCFG<Unit,SootMethod>> extendsheros.solver.IFDSSolver<Unit,D,SootMethod,I>

構造方法:JimpleIFDSSolver(heros.IFDSTabulationProblem<Unit,D,SootMethod,I>problem)

JimpleIFDSSolver(heros.IFDSTabulationProblem<Unit,D,SootMethod,I>problem,Boolean dumpResults)

其他方法:

public voidsolve(),覆寫

classheros.solver.IDESolver

<Unit,D,SootMethod,heros.solver.IFDSSolver.BinaryDomain,

I extendsheros.InterproceduralCFG<Unit,SootMethod>>中的solve()方法

public voiddumpResults()

 

ClassJimpleIDESolver<D,V,I extendsheros.InterproceduralCFG<Unit,SootMethod>>

         publicclass JimpleIDESolver<D,V,I extendsheros.InterproceduralCFG<Unit,SootMethod>> extendsheros.solver.IDESolver<Unit,D,SootMethod,V,I>

構造方法:

JimpleIDESolver(heros.IDETabulationProblem<Unit,D,SootMethod,V,I>problem)

JimpleIDESolver(heros.IDETabulationProblem<Unit,D,SootMethod,V,I>problem,Boolean dumpResults)

其他方法:

public voidsolve()覆寫class heros.solver.IDESolver

<Unit,D,SootMethod,V,Iextends heros.InterproceduralCFG<Unit,SootMethod>>中的solve

public voiddumpResults()

 

ClassDefaultJimpleIDETabulationProblem

<D,V,I extends heros.InterproceduralCFG<Unit,SootMethod>>

Public abstractclass DefaultJimpleIDETabulationProblem

<D,V,Iextends heros.InterproceduralCFG<Unit,SootMethod> >

extendsheros.template.DefaultIDETabulationProblem<Unit,D,SootMethod,V,I>

一個DefaultIDETabulationProblem使用Units作爲nodeSootMethods作爲methods

構造方法:

DefaultJimpleIDETabulationProblem(Iicfg)

 

ClassDefaultJimpleIFDSTabulationProblem

<D,I extendsheros.InterproceduralCFG<Unit,SootMethod>>

         publicabstract class DefaultJimpleIFDSTabulationProblem

<D,I extendsheros.InterproceduralCFG<Unit,SootMethod>>

extendsheros.template.DefaultIFDSTabulationProblem<Unit,D,SootMethod,I>

一個DefaultIDETabulationProblem使用Units作爲nodes和使用SootMethods作爲methods

構造方法:

publicDefaultJimpleIFDSTabulationProblem(I icfg)

 

Class SortableCSVString

public classSortableCSVString extends Object implements Comparable<SortableCSVString>

構造方法:

publicSortableCSVString(String str,int pos)

其他方法:

public intcompareTo(SortableCSVString anotherString)

    compareTo in interface Comparable<SortableCSVString>中指定

CSV文件是以“,”爲分隔表示表格內容的一種通用文件。詳細的可見:

http://baike.baidu.com/link?url=APWkpi6lxwpSbNawYLgV-m819sh89xfiXFJ9xltVhC4yfG6JmZExJJxw13DUvY8CJnGLKANEA4PRbjye-u1jb9qmhXAiEQm8ixo0bCXABh7

https://ssebuild.cased.de/nightly/soot/javadoc/

soot.jimple.toolkits.ide.exampleproblems

Class IFDSReachingDefinitions

   public class IFDSReachingDefinitions

 https://ssebuild.cased.de/nightly/soot/javadoc/

soot.jimple.toolkits.ide.icfg

 

Interface BiDiInterproceduralCFG<N,M>

已知的子類:

AbstractJimpleBasedICFG,BackwardInterproceduralCFG,JimpleBasedInterproceduralCFG,OnTheFlyJimpleBasedCFG

publicinterface BiDiInterproceduralCFG<N,M> extendsheros.InterproceduralCFG<N,M>

一個支持計算前驅的InterproceduralCFG

 

 例子:Reachingdefinition

https://en.wikipedia.org/wiki/Reaching_definition

一個程序點的reachingdefinitions指的是定義當前語句中變量的當前值的那些賦值語句。

例如:

D1:x=1;

D2:y=x;

那麼,D2程序點的reaching definitions就是D1,因爲D2中的變量x的當前值是由D1定義的;

D1:x=1;

D2:x=2;

D3:y=x;

那麼,D3程序點的reaching definitions就是D2,因爲D3中的變量x的當前值是由D2定義的,而D1定義的x值在D2時被銷燬了。

數據流的方向:前向;

交匯運算採用並集;

傳遞函數:針對賦值語句採用REACHout[S]=GEN[S]∪(REACHin[S]-KILL[S])。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章