HyperViper 开源项目教程
HyperViperToolkit for Hyper-V security research项目地址:https://gitcode.com/gh_mirrors/hy/HyperViper
1. 项目介绍
HyperViper 是一个基于 Viper 验证基础设施的开源项目,专注于通过交换性(commutativity)进行信息流推理。HyperViper 扩展了 Viper 的语法,允许用户编写使用扩展语法的程序,并通过 Viper 的默认符号执行后端进行验证。
HyperViper 项目主要由以下几个部分组成:
- hyperviper/silver: 包含 Viper 标准验证语言的定义。
- hyperviper/silicon: 包含 Viper 标准执行后端。
- hyperviper/commutativity-plugin: 包含 HyperViper 的核心实现。
- hyperviper/commutativity-plugin-test: 用于构建目的,包含 Viper 和 HyperViper 插件的依赖。
- hyperviper/silver-sif-extension: 一个预先存在的开源模块化产品程序实现。
2. 项目快速启动
2.1 环境准备
在开始之前,请确保您已经安装了以下工具:
- Java 开发工具包 (JDK)
- Scala 构建工具 (sbt)
- SMT 求解器 Z3
2.2 克隆项目
首先,克隆 HyperViper 项目到本地:
git clone https://github.com/JaanusKaapPublic/HyperViper.git
cd HyperViper
2.3 编译项目
进入 commutativity-plugin-test
目录并编译项目:
cd commutativity-plugin-test
sbt assembly
2.4 设置环境变量
设置 Z3 可执行文件的环境变量:
export Z3_EXE=/path/to/z3/executable
2.5 运行测试
运行测试以验证安装是否成功:
sbt test
2.6 验证单个文件
要验证单个文件,请使用以下命令:
./hyperviper.sh path/to/file.vpr
3. 应用案例和最佳实践
3.1 资源规范
在 HyperViper 中,资源规范是顶层声明。由于 HyperViper 支持单个程序中的多个共享资源,每个锁都与一个资源规范相关联,因此它们被称为锁类型。
示例:
locktype MyLock {
val cp: Int
noLabels: 3
}
3.2 交换性推理
HyperViper 通过交换性推理来确保信息流的安全性。每个共享动作的守卫与一组整数标签相关联,动作的执行需要一个包含特定标签的单例集。
示例:
ghost split(guardArgs[LT, a](l), 1)
4. 典型生态项目
4.1 Viper 验证基础设施
Viper 是一个开源的验证基础设施,HyperViper 作为其插件扩展了其功能。
4.2 SMT 求解器 Z3
Z3 是一个高效的 SMT 求解器,HyperViper 使用 Z3 进行符号执行和验证。
4.3 Scala 编程语言
HyperViper 使用 Scala 编写,Scala 是一种功能强大的编程语言,适合编写复杂的验证工具。
通过本教程,您应该能够快速上手 HyperViper 项目,并了解其在信息流推理中的应用。
HyperViperToolkit for Hyper-V security research项目地址:https://gitcode.com/gh_mirrors/hy/HyperViper