之前在论坛里发了个问题贴,希望通过程序实现找到包含特定操作的方法列表。
具体问题参见问题贴:http://topic.csdn.net/u/20120919/16/8b595b1d-7c95-43c3-896f-7e001a93ce93.html
这篇博文的题目是使用soot得到控制流图,也包含解决上述问题的方案。
得到指定方法的控制流图SOOT程序:
UnitGraphg;
@Override
protected void internalTransform(Body body, String string, Map map){
SootMethod method =body.getMethod();
if (method.getName().equals("MethodName")== false) {//指定需要分析的函数
return;
}
g = newExceptionalUnitGraph(body);
List<Unit>ulist=g.getHeads();//获取图的头,即入口函数,这里返回Unit列表,表示可能有多个入口
Unit u=ulist.get(0);//这里只以其中一个函数入口,即只找到其中一条控制流
while(!unitBelongList(u,g.getTails()))//一直遍历到图的最后一个元素
{
u=g.getSuccsOf(u).get(0);//不断获取当前节点的后续节