Repolode
pizlonator

pizlonator/fil-c

一个内存安全的 C 和 C++ 实现,多数现有代码无需改动即可编译运行,内存错误会被转为panic。

Star
3,902
Fork
94
未关闭 Issue
79
最近提交
19小时前

这是什么?

Fil-C 是一个内存安全的 C 和 C++ 实现,基于 clang 20.1.8 构建,支持 C17 和 C++20。大多数 C 或 C++ 软件无需改动或只需少量修改即可在其上编译运行。越界访问、释放后使用、指针与非指针类型混淆等内存错误会以 Fil-C panic 的形式被捕获,而不是悄悄破坏内存。

它结合了并发垃圾回收与对外不可见的 capability 机制:每个指针都对应一个 capability,记录其可访问的内存范围和访问方式,每一次 C 层面的基础操作都会据此检查。与 AddressSanitizer 这类基于标签的工具不同,它的目标是防止漏洞被利用,而不只是发现错误。语言中没有 `unsafe` 逃逸口,链接不安全代码也受到严格限制。

项目支持 Linux x86_64 和 ARM64 原生运行,提供基于 musl 和 glibc 的构建,另有可在 Linux、Darwin 和 Windows(x86_64)上运行的 Peregrine 版本,以及内存安全的 Linux 用户空间 Pizlix。OpenSSL、CPython、SQLite 等软件据称可以正常工作。

核心功能

  • 01多数 C 和 C++ 代码无需修改或只需少量修改即可编译。
  • 02将越界访问、释放后使用和类型混淆等错误以 panic 形式捕获。
  • 03采用基于 capability 的检查机制,而非基于标签的检测。
  • 04提供较完整的 POSIX libc,支持线程、信号、mmap、setjmp/longjmp 和 C++ 异常。
  • 05原生支持 Linux x86_64 和 ARM64,Peregrine 版本可跨多个平台运行。

适用场景

  • 为现有 C 或 C++ 程序加固,防止内存安全漏洞被利用。
  • 在运行时定位 C/C++ 代码中的内存错误,并在错误操作处停止。
  • 基于已移植的 C 软件构建内存安全的 Linux 用户空间。

快速上手

  1. 1

    从发布页面下载二进制发行版(例如 filc-0.687-linux-x86_64.tar.xz)

  2. 2

    在解压后的发行版中运行安装脚本

    ./setup.sh

使用前须知

  • 原生仅支持 Linux 上的 X86_64 或 ARM64;其他平台需使用实验性的 Peregrine 版本,且其构建需要 Linux/x86_64 主机。
  • 项目基于定制的 clang 并带有自定义运行时,从源码构建的工具链较为庞大。
  • 许可证并非单一标准许可证,取决于各组件(LLVM、PAS、musl、cosmo、glibc 等),使用前请仔细查阅相关条款。

收录于专题

标签

常见问题

fil-c 是什么?
一个内存安全的 C 和 C++ 实现,多数现有代码无需改动即可编译运行,内存错误会被转为panic。 Fil-C 是一个内存安全的 C 和 C++ 实现,基于 clang 20.1.8 构建,支持 C17 和 C++20。大多数 C 或 C++ 软件无需改动或只需少量修改即可在其上编译运行。越界访问、释放后使用、指针与非指针类型混淆等内存错误会以 Fil-C panic 的形式被捕获,而不是悄悄破坏内存。
fil-c 可以免费使用吗?用的什么许可证?
fil-c 以 Other 许可证开源。用于商业产品前,请先确认许可证条款。
fil-c 还在维护吗?
活跃维护中。fil-c 最近一次提交是在 2026年11月6日。
fil-c 适合用来做什么?
为现有 C 或 C++ 程序加固,防止内存安全漏洞被利用。 在运行时定位 C/C++ 代码中的内存错误,并在错误操作处停止。 基于已移植的 C 软件构建内存安全的 Linux 用户空间。
fil-c 怎么安装和运行?
从发布页面下载二进制发行版(例如 filc-0.687-linux-x86_64.tar.xz) 在解压后的发行版中运行安装脚本: ./setup.sh
在哪里获取 fil-c?
源代码和安装说明在 GitHub 上:https://github.com/pizlonator/fil-c

概要由 AI 根据项目 README 生成;GitHub 数据每日更新。

相关项目