使用WALA分析Java字节码时如何摆脱不相关的类? - java

我在http://www.programcreek.com/2012/10/wala-tutorial/上阅读了有关WALA的文章,并尝试执行该示例。我想知道如何摆脱除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();
            }


    }
}

参考方案

在IClass循环中,使用isApplicationLoader()首先添加以下行以检查作用域。

if (!scope.isApplicationLoader(c.getClassLoader())) continue;

JAVA:字节码和二进制有什么区别? - java

java字节代码(已编译的语言,也称为目标代码)与机器代码(当前计算机的本机代码)之间有什么区别?我读过一些书,他们将字节码称为二进制指令,但我不知道为什么。 参考方案 字节码是独立于平台的,在Windows中运行的编译器编译的字节码仍将在linux / unix / mac中运行。机器代码是特定于平台的,如果在Windows x86中编译,则它将仅在Win…

java:继承 - java

有哪些替代继承的方法? java大神给出的解决方案 有效的Java:偏重于继承而不是继承。 (这实际上也来自“四人帮”)。他提出的理由是,如果扩展类未明确设计为继承,则继承会引起很多不正常的副作用。例如,对super.someMethod()的任何调用都可以引导您通过未知代码的意外路径。取而代之的是,持有对本来应该扩展的类的引用,然后委托给它。这是与Eric…

Java App中的SSH具有“期望”之类的功能 - java

Improve this question 使用“期望”,可以执行SSH命令并解析这些命令的输出以更改程序流。我想用Java做到这一点。也就是说,我希望我的Java应用程序启动SSH会话,在远程服务器上执行命令,并依靠该命令的输出执行下一个命令,而无需启动新的SSH会话。这在Java中可行吗?谢谢 参考方案 自我推广我的项目:在查看了其他基于Java的Exp…

Java:正则表达式模式匹配器是否有大小限制? - java

我的模式类似于OR:“word1 | word2 | word3”我大约有800个字。可能有问题吗? 参考方案 您仅受记忆和理智的限制。 :)

Java:线程池如何将线程映射到可运行对象 - java

试图绕过Java并发问题,并且很难理解线程池,线程以及它们正在执行的可运行“任务”之间的关系。如果我创建一个有10个线程的线程池,那么我是否必须将相同的任务传递给池中的每个线程,或者池化的线程实际上只是与任务无关的“工人无人机”可用于执行任何任务?无论哪种方式,Executor / ExecutorService如何将正确的任务分配给正确的线程? 参考方案 …