项目简介
本项目主要用于模拟运行 Silhouette,提供了 Docker 镜像以节省构建时间,同时支持用户在满足特定环境和依赖的情况下从头构建 Silhouette 编译器、Newlib 和 compiler - rt。项目还提供脚本进行自动化操作,通过多样的测试程序验证 Silhouette 的防护效果,并且具有良好的可扩展性。
项目的主要特性和功能
- 提供 Docker 镜像,包含预编译的 Silhouette 编译器、库的二进制文件以及程序源代码,节省构建时间。
- 支持从头构建 Silhouette 编译器、Newlib 和 compiler - rt。
- 使用
demo.py
脚本可编译、调试和运行基准测试套件(BEEBS 和 CoreMark)以及测试程序,展示 Silhouette 的保护机制。 - 测试程序套件多样,可模拟不同的内存安全和控制流劫持攻击,验证防护效果。
- 具有可扩展性,方便添加新的程序。
安装使用步骤
使用 Docker 镜像
若选择使用 Docker 镜像运行 Silhouette,只需运行以下命令:
shell
docker run -it --rm ursec/silhouette-qemu-demo
运行后会在容器中生成一个 shell,可跳过环境设置阶段,直接进入构建和运行阶段。
从头构建
环境假设和依赖
- 主机为 x86 架构,操作系统为 Linux。
PATH
中需包含合适版本的cmake
、ninja
、clang
。PATH
中需包含构建 Newlib 和 compiler - rt 所需的常见开发工具,如arm - none - eabi - gcc
和make
。PATH
中需包含合适版本的scons
。PATH
中需包含合适版本的qemu - system - arm
。PATH
中需包含合适版本的screen
。- 若要使用调试脚本,
PATH
中需包含gdb - multiarch
或arm - none - eabi - gdb
。
具体步骤
- 复制仓库
shell
- 构建 Silhouette 编译器
shell cd Silhouette - QEMU - Demo && ./build/build.llvm.sh
构建完成后,Silhouette 编译器将安装在build/llvm/install
目录。 - 构建 Newlib 和 compiler - rt
shell ./build/build.newlib.sh && ./build/build.compiler.rt.sh
构建完成后,Newlib 将安装在build/newlib - baseline/install
和build/newlib - silhouette/install
目录,compiler - rt 将安装在build/compiler - rt - baseline/install
和build/compiler - rt - silhouette/install
目录。
构建、调试和运行程序
使用 demo.py
脚本,其命令行参数格式如下:
shell
./demo.py <ACTION> <CONFIG> <BENCH> [PROGRAM [PROGRAM]...]
- ACTION
可选值为 build
、debug
或 run
。
- CONFIG
为配置名称,可选 baseline
或 silhouette
。
- BENCH
为基准测试/程序套件名称,可选 beebs
、coremark
或 tests
。
- PROGRAM
为对应基准测试/程序套件中的程序名称,若未指定,则编译/运行套件中的所有程序。
例如:
shell
./demo.py build baseline beebs bs ns
将使用基线配置编译 BEEBS 中的两个程序(bs
和 ns
)。
shell
./demo.py run silhouette tests
将运行所有使用 Silhouette 配置编译的测试程序。
下载地址
点击下载 【提取码: 4003】【解压密码: www.makuang.net】