使用WALA分析Java字节码时如何消除无关类?

4
我看了有关WALA的文章,地址是http://www.programcreek.com/2012/10/wala-tutorial/,并尝试执行其中的示例。我想知道如何除去test.jar中除了我的测试代码之外的所有类。谢谢!
import java.io.File;
import java.io.IOException;
import java.util.jar.JarFile;

import com.ibm.wala.classLoader.IClass;
import com.ibm.wala.classLoader.IMethod;
import com.ibm.wala.ipa.callgraph.AnalysisScope;
import com.ibm.wala.ipa.cha.ClassHierarchy;
import com.ibm.wala.ipa.cha.ClassHierarchyException;
import com.ibm.wala.ipa.cha.IClassHierarchy;
import com.ibm.wala.util.config.AnalysisScopeReader;
import com.ibm.wala.util.io.FileProvider;


public class WalaTest {
    public static void main(String args[]) throws IOException, ClassHierarchyException {

            File exFile=new FileProvider().getFile("Java60RegressionExclusions.txt");
            System.out.println(exFile.getAbsolutePath());
            AnalysisScope scope = AnalysisScopeReader.makeJavaBinaryAnalysisScope("test.jar",exFile);
            IClassHierarchy cha = ClassHierarchy.make(scope);
            for (IClass c : cha) {
                String cname = c.getName().toString();
                System.out.println("Class:" + cname);
                for (IMethod m : c.getAllMethods()) {
                    String mname = m.getName().toString();
                    System.out.println("  method:" + mname);
                }
                System.out.println();
            }


    }
}

你到底想做什么?为什么不能手动删除多余的文件呢? - Antimony
1
问题应该标记为wala,这是IBM的静态分析库。 - Ryan
@Ryan,到目前为止,“Wala”不是一个有效的标签。 - S. Nabil
1个回答

4
在 IClass 的循环中,添加以下行以首先使用 isApplicationLoader() 检查范围。
if (!scope.isApplicationLoader(c.getClassLoader())) continue;

你仍然需要为整个范围创建cha,但仅为分析的类获取cha会更好。 - S. Nabil

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接