ADD file via upload
This commit is contained in:
parent
3fe1a9ec8d
commit
dc85bfae97
|
@ -0,0 +1,137 @@
|
||||||
|
package com.nii.soot.CFGCamera2Analyser;
|
||||||
|
|
||||||
|
import java.util.HashSet;
|
||||||
|
import java.util.Iterator;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
import soot.*;
|
||||||
|
import soot.jimple.*;
|
||||||
|
import soot.jimple.internal.*;
|
||||||
|
import soot.toolkits.graph.*;
|
||||||
|
import soot.options.Options;
|
||||||
|
import soot.tagkit.LineNumberTag;
|
||||||
|
import soot.tagkit.Tag;
|
||||||
|
import soot.toolkits.graph.CompleteBlockGraph;
|
||||||
|
import soot.toolkits.scalar.ArraySparseSet;
|
||||||
|
import soot.util.Chain;
|
||||||
|
import soot.util.HashChain;
|
||||||
|
|
||||||
|
public class MyAnalysisCameraX extends BodyTransformer {
|
||||||
|
|
||||||
|
protected void internalTransform(final Body body,String phase, @SuppressWarnings("rawtypes")Map options){
|
||||||
|
// for (SootClass c:Scene.v().getApplicationClasses()) {
|
||||||
|
// System.out.println("[sootClass]"+c);
|
||||||
|
// for(SootMethod method:c.getMethods())
|
||||||
|
// {
|
||||||
|
// //System.out.println("[sootMethod]"+m);
|
||||||
|
//
|
||||||
|
// if (method.hasActiveBody()) {
|
||||||
|
// Body methodBody = method.getActiveBody();
|
||||||
|
// Iterator<Unit> unitIt = methodBody.getUnits().snapshotIterator();
|
||||||
|
//
|
||||||
|
// while (unitIt.hasNext()) {
|
||||||
|
// Stmt stmt = (Stmt) unitIt.next();
|
||||||
|
//
|
||||||
|
// // 在语句中查找与camera2相关的内容
|
||||||
|
// if (stmt.toString().contains("camera2")) {
|
||||||
|
// System.out.println("Found camera2-related code in method: " + method);
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
//}
|
||||||
|
// 获取所有类
|
||||||
|
Chain<SootClass> classes = Scene.v().getClasses();
|
||||||
|
Set<SootMethod> methodsWithCamera2Resource = new HashSet<>();
|
||||||
|
|
||||||
|
// 遍历所有类
|
||||||
|
for (SootClass sootClass : classes) {
|
||||||
|
// 遍历类中的方法
|
||||||
|
for (SootMethod sootMethod : sootClass.getMethods()) {
|
||||||
|
// 分析每个方法是否包含 Camera2 相关资源
|
||||||
|
if (sootMethod.hasActiveBody()) {
|
||||||
|
if (containsCamera2Resource(sootMethod)) {
|
||||||
|
methodsWithCamera2Resource.add(sootMethod);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!methodsWithCamera2Resource.isEmpty()) {
|
||||||
|
System.out.println("Methods that contain CameraX resource calls:");
|
||||||
|
for (SootMethod method : methodsWithCamera2Resource) {
|
||||||
|
System.out.println("Class: " + method.getDeclaringClass() + ", Method: " + method);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
System.out.println("No methods found that contain CameraX resource calls.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public static boolean containsCamera2Resource(SootMethod method) {
|
||||||
|
DirectedGraph<Unit> cfg = new ExceptionalUnitGraph(method.getActiveBody());
|
||||||
|
|
||||||
|
for (Unit unit : cfg) {
|
||||||
|
Stmt stmt = (Stmt) unit;
|
||||||
|
if (stmt.toString().contains("cameraX")) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//import soot.*;
|
||||||
|
//import soot.jimple.Stmt;
|
||||||
|
//import soot.jimple.internal.*;
|
||||||
|
//import soot.toolkits.graph.*;
|
||||||
|
//import soot.toolkits.scalar.ArraySparseSet;
|
||||||
|
//import soot.util.Chain;
|
||||||
|
//import soot.util.HashChain;
|
||||||
|
//
|
||||||
|
//import java.util.HashSet;
|
||||||
|
//import java.util.Map;
|
||||||
|
//import java.util.Set;
|
||||||
|
//
|
||||||
|
//public class MyAnalysis extends BodyTransformer{
|
||||||
|
//
|
||||||
|
// protected void internalTransform(final Body body, String phase, @SuppressWarnings("rawtypes") Map options) {
|
||||||
|
// // 创建一个容器,用于存储包含"camera2"资源的方法
|
||||||
|
// Set<SootMethod> methodsWithCamera2Resource = new HashSet<>();
|
||||||
|
//
|
||||||
|
// // 创建控制流图
|
||||||
|
// DirectedGraph<Unit> cfg = new ExceptionalUnitGraph(body);
|
||||||
|
//
|
||||||
|
// // 遍历控制流图的每个节点
|
||||||
|
// for (Unit unit : cfg) {
|
||||||
|
// Stmt stmt = (Stmt) unit;
|
||||||
|
//
|
||||||
|
// // 在语句中查找与"camera2"相关的内容
|
||||||
|
// if (stmt.toString().contains("camera")) {
|
||||||
|
// // 如果找到,将包含该资源的方法添加到容器中
|
||||||
|
// methodsWithCamera2Resource.add(body.getMethod());
|
||||||
|
// break; // 中断循环
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// if(methodsWithCamera2Resource.isEmpty())
|
||||||
|
// {
|
||||||
|
// System.out.println("There is no method to involve camera2 resources.");
|
||||||
|
// }
|
||||||
|
// else
|
||||||
|
// {
|
||||||
|
// // 在这里,你可以根据需要处理或记录methodsWithCamera2Resource中的方法
|
||||||
|
// for (SootMethod method : methodsWithCamera2Resource) {
|
||||||
|
// System.out.println("Method with camera2 resource: " + method);
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
//}
|
Loading…
Reference in New Issue