这个烟灰类加载一个类并打印方法的数量。当我给出要加载的类的正确名称时,它说该类是幻影。 同样,当类不存在时,它会给出相同的消息。我不知道我做错了什么。
public class Loader {
public static void main(String args[]){
List<String> projectPaths;
String classPath;
String highLevelPackageName;
classPath = "C:\Users\Alastair\workspace1\Interview\bin";
projectPaths = new ArrayList<String>();
projectPaths.add(classPath);
Options.v().set_allow_phantom_refs(true);
Options.v().set_whole_program(true);
Options.v().set_app(true);
Options.v().set_no_bodies_for_excluded(true);
Options.v().set_process_dir(projectPaths);
String previousClassPath = Scene.v().getSootClassPath();
previousClassPath += ";" + classPath;
Scene.v().setSootClassPath(previousClassPath);
SootClass sootClass = Scene.v().loadClassAndSupport("Diagonal.class");
sootClass.setApplicationClass();
System.out.println(sootClass.getMethodCount());
}
}
这是我尝试加载的类。
public class Diagonal {
public static void main(String args[]) {
diagonal();
lefttriangle();
righttriangle();
tree();
}
public static void diagonal() {
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 5; j++) {
if (i == j) {
System.out.print("*");
} else {
System.out.print(" ");
}
}
System.out.println("");
}
}
public static void lefttriangle() {
for(int i=0;i<6;i++){
for(int j=0;j<6;j++){
if(j<=i){
System.out.print("*");
}
else{
System.out.print(" ");
}
}
System.out.println("");
}
}
public static void righttriangle(){
for(int i=0;i<7;i++){
for(int j=7;j>0;j--){
if(i<j){
System.out.print(" ");
}else{
System.out.print("*");
}
}
System.out.println("");
}
}
public static void tree(){
for(int i=1;i<=7;i++){
for(int j=7;j>i;j--){
System.out.print(" ");
}
for(int j = 1; j < i*2; j++){
System.out.print("*");
}
System.out.println("");
}
}
}
Phantom 类是 Soot 类路径上不存在的类的隐式创建模型。要解决此问题,请确保您引用的类位于 Sot 的类路径上。