Opal是一个可扩展的库,用于分析和工程Java字节码。 Opal完全用Scala编写,并利用Scala的高级语言功能提供了一种新的且以前看不见的灵活性和易用性。蛋白石是从头开始设计的,考虑到可扩展性,适应性和可扩展性(记忆和性能方面)。蛋白石的许多部分已经平行,要么提供必要的基础架构来实现高度并发分析,要么至少是线程安全的。
蛋白石由几个项目组成:
常见(蛋白石/公共):包含一般有用的功能,数据结构(例如,三emaps)和图算法(例如,计算强烈连接的组件,计算统治者信息等)在分析(字节)代码时有用。
静态分析基础架构(OPAL/SI):包含一个基于晶格的框架,用于实现模块化静态分析。
字节码基础架构(OPAL/BI):解析Java 1.0 -Java 16字节码的必要基础结构。
字节码拆卸器(OPAL/DA):Java字节码拆卸器,提供类文件的一对一表示,可用于创建Java类文件的可读HTML表示。
字节码创建器(OPAL/BC):工程师Java字节码的大多数基础基础结构。
字节码表示(OPAL/BR):OPAL的Java字节码的基本表示。实现所有功能以对Java类文件进行基本分析。
抽象解释框架(OPAL/AI):基于抽象解释的框架的实现,可用于轻松以不同级别的精度实施分析。
三个地址代码(OPAL/TAC):提供两个基于3个编码的中间表示。直接基于字节码直接创建的天真,以及使用基本的抽象解释的结果直接提供CFG以及Def-use信息的更高级别的SSA状表示。
依赖项提取(OPAL/DE):为提取和分析项目源代码依赖项提供支持。该项目是项目的基础,例如检查体系结构。
体系结构验证(OPAL/AV):一个针对指定的架构检查项目实现的体系结构的小框架。
框架(蛋白石/框架):基本上只是汇总了所有子项目,以便轻松获得所有子项目的一致快照。通常,建议在要使用蛋白石时声明对该项目的依赖。
演示(蛋白石/演示):包含演示如何使用蛋白石的工作代码样本。演示项目中的代码主要是作为教学资源。要启动示例,请启动sbt控制台(Scala构建工具),然后将当前项目更改为“演示”( project Demos )。之后,您可以run几个小型演示分析。
爱马仕(蛋白石/工具/爱马仕):针对项目集运行各种代码查询的框架。
BugPicker (Opal/Tools/bp):在源代码中查找control-/DATA-FLOW问题的工具。确定的问题范围从无用的防御检查到导致(未手持)运行时异常的错误。
OPAL还提供了越来越多的工具,这些工具旨在帮助开发人员熟悉Java字节码和/或OPAL。这些项目位于文件夹DEVELOPING_OPAL/tools中,可以使用SBT控制台运行。
以下内容适用于“主/开发”分支。
Opal使用SBT作为其构建工具,使用SBT控制台使用OPAL特别容易。确保您的Java 8至少更新171,Scala 2.12.13和SBT 1.4.6已安装和运行,并且SBT至少可以使用4GB RAM(-XMX4G)。下载最近的蛋白石或克隆存储库的快照。转到Opal的根文件夹。
sbt cleanBuild 。这将编译所有核心项目(包括测试),生成项目范围的Scaladoc文档,并将项目发布给您的本地IVY目录。local.sbt and specify the two system properties ( JAVA_OPTS ): -Dorg.opalj.threads.CPUBoundTasks=8 -Dorg.opalj.threads.IOBoundTasks=24 - set the values to appropriate values for your machine ( CPUBoundTasks === "Number of real CPUs (Cores)" , IOBoundTasks === "Number of (hyperthreaded) cores * 1 .5" )。您还可以通过键入使用SBT时设置这些属性:eval sys.props("org.opalj.threads.CPUBoundTasks") = "1" 。sbt test以运行单元测试,并测试一切都按预期工作。请注意,某些测试会产生一些其他(彩色)输出。但是,只要所有测试成功而没有错误,一切都可以。如果sbt test失败,则可能是由于内存不足所致。在这种情况下,有必要以更多的内存启动SBT本身。sbt it:test以运行集成测试套件。执行此测试套件可能需要很长时间(在具有32GB和8个内核的快速桌面上,需要〜2H)。你准备出发了。
故障排除
当您在构建蛋白石方面遇到问题时,请考虑以下选项。
要开始,请访问项目网页。此外, Demos项目中的代码包含许多简短(ER)示例,这些示例演示了如何解决常规任务。大多数示例可以直接执行。
启动SBT控制台。 (在命令行上的Opal的根文件夹呼叫sbt中。)使用命令project Demos演示将项目更改为演示,然后run类型以运行其中一个演示。