写点什么

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

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

关注

评论

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

一张表就是一个智能业务系统,钉钉全新发布“AI表格”

ToB行业头条

在YashanDB中优化查询性能的技术分析

数据库砖家

LanceDB:AI时代的多模态数据湖

火山引擎开发者社区

火山引擎

KingbaseES 到 Apache Doris 实时同步实践|国产数据库数据入仓解决方案

tapdata

Tapdata 日志解析 KingbaseES实时同步 Doris数据入仓 国产数据库,数据类型映射

失明十年后,他在这里找到当大侠的感觉

脑极体

AI

中国商飞与宁德时代战备合作,市场影响深远

科技汇

MyEMS开源能源管理系统核心代码解读011

开源能源管理系统

开源 能源管理

MyEMS开源能源管理系统核心代码解读012

开源能源管理系统

开源 能源管理 代码解读

数字化转型三阶段:信息化、数字化、数智化分别代表着什么?

优秀

数字化 信息化 数智化

2026第二届杭州国际人形机器人与机器人技术展览会

AIOTE智博会

机器人展 智能机器人展 人形机器人展

时序数据库技术创新大会:以 IoTDB 为核心,洞见「DB + AI」的工业物联未来

Apache IoTDB

时序数据库 TDengine × SSRS:自动报表的高性能组合拳

TDengine

tdengine 数据 时序数据库 报表

IT小伙伴要知道的-IT运维堡垒机相关知识

行云管家

堡垒机 IT运维

淘宝商品评论API接口全解析:从数据采集到情感分析

tbapi

淘宝商品评论接口 天猫商品评论接口 淘宝API 淘宝商品评论API 天猫商品评论API

ByteBrain x 清华 VLDB25|时序多模态大语言模型 ChatTS

火山引擎开发者社区

火山引擎

脑机接口一百年

脑极体

AI

中国商飞与宁德时代跨界,共护投资者权益

科技汇

Claude Code 免费羊毛快薅

白大米

Claude cursor

AI 英语口语 App 的开发

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

软件外包公司 AI听力 AI英语学习

天下拍“同步拍”模式:让异地竞拍变得触手可及

至存网络

拍卖系统 拍卖软件 艺术品拍卖 资产拍卖 竞拍

报名开启!AI 助力快速设计仿真技术研讨会(浙江温岭)

Altair RapidMiner

AI 制造业 CAE Inspire Simlab

MyEMS开源能源管理系统核心代码解读010

开源能源管理系统

开源 代码 能源管理 开源能源管理系统

中国商飞与宁德时代携手,技术创新引领航空新能源

科技汇

在YashanDB数据库中实现高效的并发控制

数据库砖家

满血DeepSeek加持的AlphaGPT,助力高文律师事务所全面拥抱AI

科技汇

全球研讨会|知识图谱赋能数据平台价值升级

Altair RapidMiner

人工智能 机器学习 AI 数据分析 知识图谱

官宣 | Fluss 0.7 发布公告:稳定性与架构升级

Apache Flink

原点安全签约广西北部湾银行,实现多场景一体化数据安全平台建设

原点安全

Awesome Mac 精选资源合集

qife122

macos 命令行工具

在YashanDB数据库中优化存储空间的方法介绍

数据库砖家

在YashanDB中如何实现高效的数据恢复和备份策略?

数据库砖家

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