阿里、蚂蚁、晟腾、中科加禾精彩分享 AI 基础设施洞见,现购票可享受 9 折优惠 |AICon 了解详情
写点什么

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

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

关注

评论

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

阿里首次公布 Java10W 字面试复盘笔记,面面俱到、太全了

Java 程序员 架构 面试

恭喜埃文科技入选“创新能力百强企业”!

郑州埃文科技

区块链赋能农业振兴,农产品溯源系统

13530558032

架构训练营模块 6 作业 - 江哲

江哲

华云大咖说 | 华云数据与福昕鲲鹏携手共建国产云生态

华云数据

技术干货 | Windows桌面端录屏采集实现教程

ZEGO即构

RTC 录屏采集

cpu突然变高定位步骤

hasWhere

Bzz节点云矿机分币系统开发,云算力矿机租赁

Java版本发布历史

hasWhere

直呼内行!阿里大佬离职带出内网专属“Spring Security Oauth2.0”学习笔记

Java 程序员 架构 面试 微服务

干货|车来了APM应用性能体验实践

APM App 稳定性 APP稳定性

JavaWeb 项目服务器部署详细教程(MySQL + JDK + Tomcat)

若尘

MySQL jdk javaWeb java编程 6月日更

Flink+Hologres助力伊的家电商平台建设新一代实时数仓

Apache Flink

flink

Java性能问题定位命令

hasWhere

中国信通院云大所与dbaplus社群开启战略合作,共同推动多项标准落地

dbaplus社群

「区块链+游戏」背后能否诞生下一个腾讯?

CECBC

区块链电子合同技术方案,区块链电子合同平台

13530558032

JAVA语言基础(五)--数组

加百利

Java 后端 6月日更

超全Redis命令总结,墙裂建议收藏,说不定就用上了呢

北游学Java

Java redis

实测 Google 全同态加密FHE,效果如何?

瑚琏

机器学习 隐私计算 多方安全计算 富数科技 Avatar2.0

RDMA打造存储利器

焱融科技

文件 高性能 数据中心 分布式存储

开发效率提升50%以上,爱奇艺官网主站的Nuxt实践

爱奇艺技术产品团队

大前端 开发 nuxt

AI 转型必看|算法工程师的 AI 启示录

百度大脑

人工智能

IDEA搭建DCM4CHEE开发环境

birdbro

intellij-idea 医学影像 DICOM PACS DCM4CHE

Zilliz 陈室余:女性的独特洞察,可能为开源发现新机遇 | ECUG Meetup 讲师专访

七牛云

数据库 开源 音视频 Meetup Milvus

618技术特辑(四)疯狂剁手的同时,电商隐私安全你注意到了吗?

华为云开发者联盟

电商 数据安全 云安全 618 隐私安全

Python——嵌套

在即

6月日更

性能排查常用Linux命令

hasWhere

我以为我对Mysql很熟,直到遇到了阿里这份笔记

Java架构师迁哥

Cilium 首次集成国内云服务,阿里云 ENI 被纳入新版本特性

阿里巴巴云原生

容器 云原生

Windows Core Audio 音频开发技术指南

拍乐云Pano

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