基于 Linux perf 采样数据的 AutoFDO 工具链,用于优化编译后的二进制程序。
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
从发布页面下载二进制发行版(例如 filc-0.687-linux-x86_64.tar.xz)
- 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 数据每日更新。
相关项目
Rust 编程语言的主源码仓库,包含编译器、标准库和官方文档。
Swift 编程语言及其编译器工具链,默认内存安全,性能高,可直接调用 C 和 Objective-C 代码。
一门无堆分配器、无垃圾回收的实验性系统编程语言,由编译器管理数据栈以保证内存安全。
模块化的编译器与工具链技术集合,包含 LLVM 核心、Clang 前端、libc++ 标准库和 LLD 链接器。
将 C 和 C++ 代码编译为 WebAssembly,使其可在浏览器、Node.js 等环境运行的编译工具链。