LLVM 開發人員建議在 C++ 中進行安全緩衝區處理

LLVM 徽標

LLVM 是一個用於開發編譯器以及幫助構建新的編程語言和改進現有語言的框架。

很多 LLVM 項目的開發人員提出了一些旨在加強安全性的更改 的項目 C + +中 關鍵任務,並提供一種方法來消除由緩衝區溢出引起的錯誤。

因此,他們發布的提案特別關注兩個領域的工作:提供一個允許安全使用緩衝區的開發模型,以及努力加強 libc++ 標準函數庫的安全性。

提到了為 C++ 提出的安全編程模型 «是在使用緩衝區而不是操作原始指針時使用標準庫提供的類». 例如,建議使用 std::array、std::vector 和 std::span 類,它們將添加運行時檢查以檢查越界分配的內存。

我們的目標是提高關鍵 C++ 代碼庫的安全性。 為此,我們計劃研究兩個想法。

強化 C++ 標準庫
C++ 安全緩衝區編程模型和採用工具
強化的 libc++ 旨在使 C++ 標準庫接口更安全。

C++ 的安全緩衝區編程模型以及強化的 libc++ 提供運行時緩解越界內存訪問。 採用工具將自動將代碼遷移到這種新的編程模型。

除此之外,它還提到 打擊“危險”的編程實踐 在鏗鏘聲中,如果 建議對所有指針算術運算發出編譯器警告,類似於使用“cppcoreguidelines-pro-bounds-pointer-arithmetic”標誌時的clang-tidy linter警告,LLVM 16中將出現對它的支持。為了啟用此類警告,將向clang添加一個單獨的標誌,默認情況下不活動.

計劃在libc++中實現一個可選的保護模式, 啟用後,它將檢測一些導致運行時未定義行為的情況。 例如,在課堂上 std::span 和 std::vector,將監視越界訪問,在這種情況下程序將失敗。

這些額外的運行時檢查將分為幾個可以單獨控制的類別。 其目的是,在其平台上發布 libc++ 的供應商可以根據所需的安全級別決定在發布庫中啟用哪些檢查(如果有)。

開發人員認為,添加此類更改將使 libc++ 與 C++ 標准保持一致,因為如何處理未定義行為的情況取決於庫開發人員的選擇,他們可以將未定義行為視為需要程序執行的鎖。出口。

libc++ 中的運行時檢查計劃分為幾類 可以單獨包含。 一些不會導致更複雜操作或 ABI 更改的建議檢查已經在 libc++ 的安全模式(安全模式)中實現。

重申一下,最終目標是交付庫在生產中啟用這些檢查; 這不是“僅調試”功能,儘管它最終將取代長期損壞的“調試模式”。

另外, 計劃準備一套代碼修正工具 這將允許用容器中的原始指針替換變量,並在容器不能直接替換指針的情況下應用替代處理程序(例如,“if(array_pointer)”構造可以轉換為“if(span.data ( )»).Settings 不僅可以應用於局部變量,還可以應用於帶有指針的類型參數。

還提到了 正在考慮使用“clang 靜態分析器檢查器” 路由敏感,如果 標準::跨度 由小於跨度構造函數中指定大小的容器構造。 上述檢查器是獨立的且獨立有用的,如果一切順利,它將默認為所有用戶啟用

終於 如果您有興趣了解更多信息,您可以在中查看詳細信息 以下鏈接。


發表您的評論

您的電子郵件地址將不會被發表。 必填字段標有 *

*

*

  1. 負責資料:AB Internet Networks 2008 SL
  2. 數據用途:控制垃圾郵件,註釋管理。
  3. 合法性:您的同意
  4. 數據通訊:除非有法律義務,否則不會將數據傳達給第三方。
  5. 數據存儲:Occentus Networks(EU)託管的數據庫
  6. 權利:您可以隨時限制,恢復和刪除您的信息。