Nguồn: corsix.org
Tóm tắt
Fil-C là một triển khai C/C++ an toàn về bộ nhớ (memory-safe), đạt được bằng cách thêm metadata vào mọi con trỏ tại thời điểm biên dịch. Bài viết trên corsix.org trình bày mô hình đơn giản hóa để giải thích cơ chế hoạt động trước khi đọc tài liệu kỹ thuật gốc.
Ý tưởng cốt lõi: mỗi biến con trỏ trong code được compiler tự động thêm một biến AllocationRecord* đi kèm. AllocationRecord lưu ba trường: visible_bytes (vùng nhớ thực), invisible_bytes (metadata cho con trỏ trong heap), và length. Mọi phép gán con trỏ đều sao chép cả AllocationRecord* tương ứng, và mọi phép dereference đều kiểm tra bounds trước khi truy cập.
Phần thú vị nhất là cơ chế invisible_bytes: khi một vùng nhớ heap chứa con trỏ khác, invisible_bytes lưu AllocationRecord* tương ứng tại cùng offset. Điều này cho phép hệ thống theo dõi metadata của con trỏ trong heap mà không cần thay đổi ABI của dữ liệu. filc_free vô hiệu hóa AllocationRecord sau khi giải phóng, đảm bảo mọi use-after-free đều bị phát hiện.
Đây là cách tiếp cận khác với AddressSanitizer (chỉ dùng khi debug) hay Rust (yêu cầu viết lại code): Fil-C biên dịch C/C++ hiện có thành binary an toàn về bộ nhớ trong production, với overhead tại thời điểm runtime thay vì yêu cầu thay đổi ngôn ngữ lập trình.