首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

C++编程语言在嵌入式应用中的安全问题(1)

C++编程语言在嵌入式应用中的安全问题(1)

嵌入式系统的软件设计中,“汇编语言+C语言”早已成为理所当然的经典组合。的确,对于硬件配置来说,汇编语言清晰明了;对于上层设计来说,C语言紧凑高效。这样的搭配能够满足大多数传统嵌入式系统应用的需要。随着技术水平的提高,今天的嵌入式系统也比过去更加深入到人们的日常生活中,大到汽车、飞机、火箭,小到手机、打印机、闹钟、手表,都可以找到嵌入式系统的踪影。然而,这看似一成不变的情况,也在悄然转变。随着网络、多媒体等技术的出现、发展与普及,对嵌入式系统应用有了新的要求,也给了其他高级语言,特别是C++语言以机会。
由此带来的在语言使用中的安全问题,目前虽然还未凸显,但根据以往的经验来看,终将成为限制行业发展的新瓶颈。已有的C++语言国际标准虽然庞大细致,但作为一个“语言标准”,只能是尽力做得面面俱到,其目标在于构造一个语句合法性的权威依据,以约束人们对于C++的使用。但它并不是针对应用而写的规范,对于可能遇到的安全性问题也无法进行特别深入的探讨,更加没有安全方面的实践经验支撑。一个针对安全方面的、被国际所认可的使用规范,无疑是 C++语言在嵌入式系统中得到广泛应用的坚实基础与助推剂。
1 C++在嵌入式应用中的机遇与挑战
C++作为一门高级语言,人们在提及它时,总难免会谈到C语言。直至今天,很多人对于C++语言的认识依然是“C语言的超集”。这是因为C++的起源与C语言有着千丝万缕的联系。
1978年,美国贝尔实验室的Dennis Ritchie和BrianKernighan在BCPL以及其简化版本B语言的基础之上开发了C语言,并合作出版了《The C Programming Lan-guage》。C语言迅速得到了大家的认可,并广为流传。1989年,ANSI推出了第一个C语言的标准——X3.159-1989,并被ISO 采纳,随之发布。ISO/IEC 9899-1990。早在C语言标准发布之前,贝尔实验室的Bjarne Stroustrup就致力于在C语言里增加类、函数类型检查以及其他的一些优秀特征,于1980年发布“C with Classes”。经过持续的努力,他最终完成了对C语言的改造,由此创生出一门新语言——C++,并出版了《The C++ ProgrammingLanguage》一书。由于它带来了持续的影响,ISO于1998年发布ISO/IEC 14882:1998;几乎同一时间,ANSI也发布了类似标准,这标志着C++作为一门独立语言的标准化得到了官方的认可。
统计数据表明,日常生活中一个美国人平均占用8个微控制器,这些都离不开嵌入式系统的应用。然而嵌入式系统软件技术似乎落后于当前的软件发展形势,近年来才逐渐由汇编语言过渡到面向过程的C语言。但对于面向对象语言的应用还很有限。
这一方面是由于嵌入式开发人员多年来应付有限资源的经验而养成的保守态度,另一方面也是由于长久以来,嵌入式系统应用设计中,人们要花费许多精力在底层硬件的驱动上,功能实现也主要局限在实时操作系统和相关支撑软件的层次,并不涉及过多的应用软件开发。这种在严苛条件下追求效率与实时性的任务,其他的高级语言并没有特别的优势。
最近几年,嵌入式系统领域又有了新的发展。首先,随着手机、PDA等消费性电子产品的飞速增长,嵌入式系统的市场规模在迅速扩大,同时越来越多的智能嵌入式应用场合需要互联网的支持,这要求嵌入式系统的软件具有更好的应用性和更高的复杂性;其次,随着芯片等相关领域的技术进步,嵌入式系统工程师们不再需要时时刻刻去考虑资源是否够用了。当面向对象的高级语言参与到嵌入式系统设计中去不再遥不可及时,语言的效率则成为突出的问题。根据《Thinking in C++》一书的总结,C++与C的效率差别往往在±5%,这使得C++在新一轮的嵌入式应用发展浪潮中占得先机。
值得注意的是,尽管自1998年发布最初的C++标准——ISO/IEC 14882:1998以来,每5年都会对此标准进行一次更新,但是由于C++语言过于复杂,以及它经历了长年的演变,直到2004年,没有任何一款编译器完全支持ISO C++。这对于时常要面对各种严苛条件的嵌入式系统应用工程师们来说,是难以忍受的。同时,即使是符合ISO C++标准的语句或者格式,对于实际的应用场合来说,也存在着重大隐患,而不应当被直接采用。因此,人们迫切需要一个正式的基于安全角度考虑的C++语言使用规范。
2 关于MISRA
MISRA(the Motor Industry Software Reliability As-sociation),即汽车工业软件可靠性协会,于1994.年在英国成立,以“协助汽车工业提供安全、可靠的软件”为使命,期望通过“规范指南”的形式来约束人们在汽车电子以及其他嵌入式系统开发领域或涉及安全与可靠性的领域中对于程序语言的使用。由于这些“规范指南”都是从大量工程实践中总结的第一手经验,因而具有极高的指导意义。
经过4年准备,它在1998年发布了一个针对汽车工业的《Guidelines for the Use of the C Langtlage in VehicleBased Software》,简称“MISRA C:1998'’,针对那些满足C语言标准,却存在安全隐患的语言使用习惯,提出了127条规则。由于它很好地解决了C语言国际标准的冗繁性,以及其中对于安全性考虑的不足性,从而得到了广泛的好评。MISRA-C不仅成为众多汽车厂商推崇的行业标准,其影响力更是远远超出了汽车工业,得到铁路、航空航天、国防、医疗等众多领域的认可,成为“最佳实践”解决方案。2004年,MISRA对于已有的规则进行改编与扩充,推出了“MISRA C 2004”,首次将该规范指南的对象从汽车工业推广到所有具有安全性要求的系统应用中去,包含了强制规则121条,推荐规则20条,并删除了15条旧规则,共计含有141条规则。
时至今日,MISRA组织不仅是汽车工业软件规范的权威,其制定的规范指南更得到了嵌入式系统应用领域的广泛认可。考虑到近年来,C++语言在嵌入式系统中的应用越来越多,2005年MISRA C++委员会成立,并于2008年推出针对C++语言的《MISRA C++:2008——Guidelines for the USe of the C++ language in critical sys-tems>>,以下简称“MISRA C++:2008”。有兴趣的读者可以联系相关网站:http://www.misra-cpp.com/,购买详细的文档。
返回列表