littlebot
Published on 2025-04-14 / 0 Visits
0

【源码】基于 C 语言的 Silhouette 模拟运行项目

项目简介

本项目主要用于模拟运行 Silhouette,提供了 Docker 镜像以节省构建时间,同时支持用户在满足特定环境和依赖的情况下从头构建 Silhouette 编译器、Newlib 和 compiler - rt。项目还提供脚本进行自动化操作,通过多样的测试程序验证 Silhouette 的防护效果,并且具有良好的可扩展性。

项目的主要特性和功能

  1. 提供 Docker 镜像,包含预编译的 Silhouette 编译器、库的二进制文件以及程序源代码,节省构建时间。
  2. 支持从头构建 Silhouette 编译器、Newlib 和 compiler - rt。
  3. 使用 demo.py 脚本可编译、调试和运行基准测试套件(BEEBS 和 CoreMark)以及测试程序,展示 Silhouette 的保护机制。
  4. 测试程序套件多样,可模拟不同的内存安全和控制流劫持攻击,验证防护效果。
  5. 具有可扩展性,方便添加新的程序。

安装使用步骤

使用 Docker 镜像

若选择使用 Docker 镜像运行 Silhouette,只需运行以下命令: shell docker run -it --rm ursec/silhouette-qemu-demo 运行后会在容器中生成一个 shell,可跳过环境设置阶段,直接进入构建和运行阶段。

从头构建

环境假设和依赖

  • 主机为 x86 架构,操作系统为 Linux。
  • PATH 中需包含合适版本的 cmakeninjaclang
  • PATH 中需包含构建 Newlib 和 compiler - rt 所需的常见开发工具,如 arm - none - eabi - gccmake
  • PATH 中需包含合适版本的 scons
  • PATH 中需包含合适版本的 qemu - system - arm
  • PATH 中需包含合适版本的 screen
  • 若要使用调试脚本,PATH 中需包含 gdb - multiarcharm - none - eabi - gdb

具体步骤

  1. 复制仓库 shell
  2. 构建 Silhouette 编译器 shell cd Silhouette - QEMU - Demo && ./build/build.llvm.sh 构建完成后,Silhouette 编译器将安装在 build/llvm/install 目录。
  3. 构建 Newlib 和 compiler - rt shell ./build/build.newlib.sh && ./build/build.compiler.rt.sh 构建完成后,Newlib 将安装在 build/newlib - baseline/installbuild/newlib - silhouette/install 目录,compiler - rt 将安装在 build/compiler - rt - baseline/installbuild/compiler - rt - silhouette/install 目录。

构建、调试和运行程序

使用 demo.py 脚本,其命令行参数格式如下: shell ./demo.py <ACTION> <CONFIG> <BENCH> [PROGRAM [PROGRAM]...] - ACTION 可选值为 builddebugrun。 - CONFIG 为配置名称,可选 baselinesilhouette。 - BENCH 为基准测试/程序套件名称,可选 beebscoremarktests。 - PROGRAM 为对应基准测试/程序套件中的程序名称,若未指定,则编译/运行套件中的所有程序。

例如: shell ./demo.py build baseline beebs bs ns 将使用基线配置编译 BEEBS 中的两个程序(bsns)。

shell ./demo.py run silhouette tests 将运行所有使用 Silhouette 配置编译的测试程序。

下载地址

点击下载 【提取码: 4003】【解压密码: www.makuang.net】