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作爲node,SootMethods作爲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文件是以“,”爲分隔表示表格內容的一種通用文件。詳細的可見:
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])。