写点什么

扩展 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:171657
用户头像

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

关注

评论

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

华秋干货铺 | HDMI接口需注意的PCB可制造性设计问题

华秋电子

深度解析Java程序员从入行到被裁全过程

Java全栈架构师

程序人生 后端 架构师 java程序员 java面试

【TiDB Future App Hackathon 2023 】TiDB 首届全球黑客马拉松,开发者的狂欢夏日盛会!快来一起 Coding 吧!

TiDB 社区干货传送门

Testng和Junit5多线程并发测试对比

javalover123

Java 单元测试 JUnit testNG junit5

北京云管平台采购选哪家?为什么?多少钱?

行云管家

云计算 多云管理 云管平台 云管平台厂商

为什么 Serverless 能提升资源利用率?

阿里巴巴云原生

阿里云 Serverless 云原生

终极指南:Scrum中如何设置需求优先级

敏捷开发

项目管理 Scrum 敏捷开发 优先级

提示工程七巧板:让ChatGPT发挥出最佳性能

博文视点Broadview

微服务高并发基础知识:Sentinel性能压测

互联网架构师小马

Java 微服务 sentinel

普通Java工程师如何成长为一名优秀的架构师?

程序员小毕

程序人生 高并发 架构师 java程序员 java面试

第十一届“创业江苏”科技创业大赛正式启动

科兴未来News

FreeRTOS使用 — 合理使用内存 “ 任务中创建任务 ”

矜辰所致

内存管理 FreeRTOS 任务创建 6 月 优质更文活动

v7.1.0 Resource Control 功能测试

TiDB 社区干货传送门

新版本/特性解读 7.x 实践

见“芯”知著,浅析北斗芯片关键技术

江湖老铁

2023年甘肃省等级保护测评机构新鲜出炉!

行云管家

等保 等级保护 甘肃

洋洋洒洒2000字带你了解微服务高并发知识:Sentinel的特性

互联网架构师小马

Java 微服务 sentinel

科兴未来|第四届中国·盐城创新创业大赛

科兴未来News

微服务高并发流量服务降级、限流、熔断、流量效果控制

互联网架构师小马

Java 微服务

微服务架构中的数据一致性:解决方案与实践| 得物技术

得物技术

微服务 数据一致性

专访泛境科技:如何借助3DCAT实时云渲染打造元宇宙解决方案

3DCAT实时渲染

元宇宙 元宇宙解决方案 元宇宙实时云渲染

MobPush 消息重弹

MobTech袤博科技

FinClip | 来看看5月的成绩单吧

FinClip

5分钟了解Kubernetes Ingress和Gateway API

俞凡

架构 云原生 网络

瓴羊Quick BI新增多项可视化分析的模块,为数据驱动决策带来更多可能

流量猫猫头

SAP ABAP SM50 事务码的另类用途 - ABAP工作进程对数据库表读取操作的检测

汪子熙

SAP abap Netweaver 思爱普 6 月 优质更文活动

图数据库在通信行业有哪些应用?

悦数图数据库

定时任务原理方案综述 | 京东云技术团队

京东科技开发者

定时任务 线程 中间件 分布式定时任务 企业号 6 月 PK 榜

企业级低代码平台:企业IT部门的得力助手

优秀

低代码 快速开发 企业级低代码

tidb变更大小写敏感问题的总结

TiDB 社区干货传送门

集群管理 故障排查/诊断

# 文盘Rust -- tokio绑定cpu实践

TiDB 社区干货传送门

开发语言

v7.1 LTS Resource Control 试用

TiDB 社区干货传送门

新版本/特性解读 7.x 实践

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