Fil-C: 實現 C 程式的記憶體安全
Fil-C: 實現 C 程式的記憶體安全
Fil-C 是一種設計用來消除常見記憶體相關漏洞的 C 程式語言記憶體安全實現。與透過編譯時靜態分析來強制安全的語言不同,Fil-C 專注於在執行期間驗證記憶體存取,以防止崩潰和安全漏洞。
Runtime Memory Safety Enforcement
Fil-C 在執行時動態強制記憶體安全,而不是在編譯時。這意味著,即使存在記憶體錯誤的程式仍可能成功編譯,但系統會在嘗試進行無效記憶體存取的瞬間偵測並報錯。
這種架構選擇使 Fil-C 與像 Rust 這樣的語言區分開來,Rust 使用 borrow checker 在編譯階段拒絕大量記憶體安全錯誤類別。雖然 Rust 也會執行一些執行時檢查(例如邊界檢查和 RefCell 驗證),但 Fil-C 的主要安全機制是記憶體操作的執行時驗證。
System Calls and the Fil-C Standard Library
Fil-C 使用自訂的 libc 實作來管理系統呼叫。該專案聲稱,由於這些系統呼叫是由這個自訂庫中介,所以是安全的。然而,批評者指出,這個自訂 libc 最終會呼叫系統底層的 libc,實際的系統呼叫在那裡執行。
這導致了與 Rust 在系統呼叫方面的做法進行比較。在 Rust 中進行原始系統呼叫被視為 unsafe,而使用 Rust 標準庫則提供了一個安全的抽象層,類似於 Fil-C 程式使用 Fil-C 標準庫來維持安全邊界的方式。
Technical Extensions and Ecosystem
Fil-C 已將其能力擴展到基本記憶體安全之外,以包含專門的系統級功能:
- 內聯組合語言清理: Fil-C 包含一個用於內聯組合語言的清理器,一些開發者認為這可能作為獨立工具具有價值。
- 優化呼叫約定: 該專案已引入優化的呼叫約定以提升效能。
- 記憶體安全的上下文切換: Fil-C 提供了在並發環境中進行安全內容切換的機制。
- 庫移植: 幾個基礎庫,包括
freetype、fontconfig、harfbuzz和graphite,已經移植到 Fil-C。
Comparison with Other Safety Models
Fil-C 常被描述為在 C 語言環境下的一種記憶體安全工具,但它可以被視為一種互補工具,而非 Rust 的直接競爭者。由於它提供了一個執行時安全層,因此可能被用來編譯其他語言或與現有的以 C 為基礎的基礎設施整合,在那些靜態安全保證不可行的地方。
一些觀察者已將 Fil-C 的方法與以硬體為基礎的解決方案進行比較,例如 Apple 的 Memory Integrity Enforcement,並指出 Fil-C 的軟體基礎方法不依賴特定的硬體需求來提供其安全保證。