LLVM 开发人员建议在 C++ 中进行安全缓冲区处理

LLVM 徽标

LLVM 是一个用于开发编译器以及帮助构建新的编程语言和改进现有语言的框架。

MGI 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. 权利:您可以随时限制,恢复和删除您的信息。