写点什么

扩展 LLVM 的 Checked C 使 C 语言的空间内存更安全

  • 2018-09-17
  • 本文字数:1108 字

    阅读完需:约 4 分钟

Checked C 是由 Microsoft Research 组织开发的开源、合作项目,它的目标是扩展C 语言,方便程序员写出更为可靠的程序,不会出现类似缓存溢出、越界内存访问以及不正确的类型转换等问题。Checked C 的代码可以和标准C 代码共存,方便移植。

即将在IEEE Cybersecurity Development Conference 2018 上发表的一篇文章中,研究员介绍了 Checked C 主要的功能和优势

Checked C 借鉴了许多之前 safe-C 的想法,但是二者有所不同,Checked C 的设计重点在允许增量转换的同时平衡控制、互操作以及高性能。

该语言非常重视向后兼容性,它引入了检查指针的概念,来保证静态和动态访问验证。Checked C 语言尤其重视内存访问的空间安全问题,这代表着指针在分配的内存中始终是解引用的。Checked C 的三个设计重点如下所示:

  • C 指针表示得到了保留,所以 Checked C 的内存层与 C 相同。这有助于现存 C 代码库和库的互操作性。

  • 显式指明分配给指针的内存块边界,降低了编译时和运行时的负担。

  • 检查区域和边界安全接口让 Checked C 和原来的 C 代码的混合变成可能。完全移植过的代码将放在称为检查区域的 sp 中,在其中每个指针的访问都不会受到空间内存异常的限制。检查过的代码可以访问不安全的遗留 C 代码,这将通过边界安全的注解实现,这些注解将会添加到未检查的代码参数、返回值、功能、记录类型和全局变量中。

Checked C 给 C 语言添加了两个新的指针类型,_Ptr 和 Array_ptr。前者专门用于解引用,而后者支持指针运算。在解引用之前,编译器将动态地保证这两类指针的有效性。下面的例子展示了如何定义使用两个 _Array_ptr参数的功能:

复制代码
void append(
_Array_ptr<char> dst : count(dst_count),
_Array_ptr<char> src : count(src_count),
size_t dst_count, size_t src_count)
{
_Dynamic_check(src_count <= dst_count);
for (size_t i = 0; i < src_count; i++) {
if (src[i] == ’\0’) {
break;
}
dst[i] = src[i];
}
}

在创建数组的时候,程序员可以使用 _Checked 关键字指定检查边界:

int buf _Checked[10]根据 Checked C 开发者所述,要让现有的 C 代码转换为使用检查指针和数组的代码需要很多代码变更工作,可能会影响大概 17.5% 行代码。为了加快进程,团队正在开发自动转换的工具。有趣的是,Checked C 部分形式化的特点可以保证任何违背空间安全的动作都将隔离在检查区域之外。今后这一方面的努力方向将扩展到动态大小数组上。

最后需要提出的是,初步基准测试显示,检查行为增加了平均 8.6% 的运行时间。Checked C 是作为 LLVM 的扩展实现的,可以点击这里下载。

查看英文原文 Checked C Extends LLVM to Bring Spatial Memory Safety to C

感谢冬雨对本文的审校。

2018-09-17 15:171346
用户头像

发布了 218 篇内容, 共 74.3 次阅读, 收获喜欢 76 次。

关注

评论

发布
暂无评论
发现更多内容

ONES 接入 DeepSeek,研发管理效率与体验双升级

万事ONES

ONES 研发管理平台 DeepSeek

基于条件的访问控制——RBAC

运维有小邓

rbac 身份管理平台 IT 运维

Svelte 最新中文文档教程(12)—— 样式

冴羽

vue.js 前端 React Svelte SvelteKit

Autodesk AutoCAD 2021(cad 2021)中文序列号分享

Rose

AI与低代码结合:中小企业的技术弯道超车之道

天津汇柏科技有限公司

AI 低代码

利用TencentOS 在企业私有化场景中快速部署DeepSeek

TencentOS

Linux 操作系统 DeepSeek TencentOS

越“挖”越有料,天翼云“息壤”助攻DeepSeek变身万能搭子!

天翼云开发者社区

人工智能 算力 AI应用 DeepSeek

DeepSeek:探索AI辅助创作的无限可能

测吧(北京)科技有限公司

测试

等保三级测评流程解析以及相关问题解答

行云管家

等保 等保测评 等保三级

CAD神器来了!让你的CAD标注效率翻倍

在路上

cad cad看图 CAD看图王

澜舟智搭×DeepSeek:企业智能体平台全面升级,打造AI Agent应用新范式

澜舟孟子开源社区

人工智能 DeepSeek DeepSeek v3 DeepSeek-R1

Navicat Premium 15中文版:创建、管理和维护数据库

Rose

安森美芯片·声得乐助听器:重新定义听觉体验

极客天地

AI 聊天机器人开发框架及其特点

北京木奇移动技术有限公司

软件外包公司 AI机器人 AI聊天

零信任供应侧稳步发展并持续创新

芯盾时代

身份安全 零信任 统一身份管理平台

解读TaurusDB二级分区,如何提高查询性能和管理效率

华为云开发者联盟

MySQL 数据库 TaurusDB 分区表

macOS Big Sur 11(macOS11系统)v11.7.10正式版

Rose

想在M1上运行安装iOS软件怎们办?

Rose

AI工作流程开发框架

北京木奇移动技术有限公司

AI智能体 软件外包公司 AI流程

用户的声音 | 文档结构化信息提取方案测评:LLM、开源模型部署与云端API,谁是合适选择?

合合技术团队

#大模型 文档解析 #数据

兼容M1的photoshop 2021 for Mac中文直装版安装包

Rose

苹果Mac视频剪辑软件Final Cut Pro 11全新特效库

Rose

苹果虚拟机软件VMware Fusion Pro 13 密钥,VM虚拟机下载安装

Rose

【GreatSQL优化器-14】直方图应用

GreatSQL

优化器 直方图

终于搞懂MES和WMS系统的区别了

积木链小链

数字化转型 制造业 wms mes

告别混乱!浩辰CAD看图王让项目管理井井有条

在路上

cad cad看图 CAD看图王

《Operating System Concepts》阅读笔记:p41-p49

codists

操作系统

扩展LLVM的Checked C使C语言的空间内存更安全_语言 & 开发_Sergio De Simone_InfoQ精选文章