Mar*_*ouf 22 java static analysis call-graph
我想要做的是扫描一组Java类,并从抽象类的特定方法跟踪所有方法调用,并在该上下文中,构建执行某些操作的所有代码的列表(在本例中,实例化)某个类的实例).我想知道,行号和提供的参数.
我已经开始关注BCEL,但它似乎没有内置调用图形跟踪?我犹豫要写自己的,因为获得重载,类型签名和多态分派权可能是棘手的.
我一半期望存在一个工具或示例代码,但我还没有找到任何东西.我真的觉得我要重新发明一个轮子.但是,如果我这样做将是一个开源轮,可在GitHub上使用;-)
PS:你会发现现有的问题" 如何生成Java调用图 ",因为它听起来完全一样,但它根本不是我需要的.
Soot 应该可以让您轻松实现您想要的:http : //www.sable.mcgill.ca/soot/
它可以全自动构建精确的调用图。
您可以在此处找到所有必要的文档:http : //www.sable.mcgill.ca/soot/tutorial/index.html
此外,还有一个针对 Soot 的活动邮件列表。
听起来您想要一些能够提供对抽象语法和完整符号表的访问的东西。然后,对植根于抽象方法的每个实现方法(如符号表所示)的调用图中函数的 AST 进行自定义扫描,使您有机会找到其类型是感兴趣的特定类的新操作。
DMS软件重组工具包是通用编译器技术,提供解析、AST 构建/导航、符号表构建/导航、控制流、数据流和调用图构建等基本服务。DMS 有一个可选的Java 前端,它提供完整的 Java 解析器、构建 Java AST 和符号表,并可以构建调用图。Java前端还可以读取.class文件;你不清楚自己是否也想进入班级档案,寻找信息。
你想要的答案并不是现成的。您需要构建一些自定义代码来实现第一段中的想法,但 DMS 可以提供大部分原材料。它没有提供 .class 文件的太多详细信息(这些文件主要用于解析源代码中的类型)。