如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
如何保持C语言程序的安全作者AndersHolmberg,IARSystems翻译BMR如何避免C语言固有的一些危险本文将涉及用语言开发带有安全关键功能系统的一些问题。尽管这种语言充满不确定行为、依赖硬件和包含其他陷阱等都是事实,但它仍然是一个安全关键开发领域使用的最广泛和最流行的语言。随着一些深谋远虑和规划,我们可以把这个潜在的问题变成了优势。1.移动你的脚步早在1991年,《开发者的洞察力》杂志发表一个有趣的标题为《如何搬起石头砸自己的脚》文章的开头说:“随着现代编程语言的大量扩散(所有这一切似乎彼此已经被盗了无数的功能)有时记得您目前使用什么语言都是很困难的。本指南作为一项公共服务,以帮助程序员发现自己是否处于这样的困境。”由C开始的语言列表和其简单的状态:C-你搬起石头砸了自己的脚此判决可能显得有点苛刻,但还是有些道理的。然而,即使替代编程语言可能没有如类型安全和不确定的行为等方面的问题,但他们往往缺乏编程控制硬件功能。如果我们坚持用C语言,我们就需要在明显的和不那么明显的陷阱之间找一个平衡点,同时善用其特点。我们可以从两个不同的角度看看C语言安全关键功能编程的发展情况:在安全关键的项目中有哪些外部需求,需要对于编程语言进行选择吗?你可以做些什么弥补一些明显的C语言的缺陷呢,还有就是你是面对的是工作时遗留代码?2.标准的答案如果您正在涉及如汽车、工业控制、医疗设备、或铁路等方面的产品,它们有正式的功能安全要求。这种要求可以归结为一个非常具体的产品耐受性故障率的要求,或产品中某些特定功能的允许故障率。它也可以是一个按照IEC61508(电气和电子可编程器件),ISO26262(汽车),或EN50126x(铁路)等特定的功能安全标准开发的产品。10年了,一个明显的趋势是安全功能的实施正在远离纯机械或PLC控制的自动化而进入单片机的世界,因此这种要求也渗透到了软件领域。由于各种标准对软件要求的意图是类似的,我们使用IEC61508标准作为一个例子。本标准规定了许多部门的具体标准的基础要求,对IEC61508有效的要求很大程度上对例如ISO26262也是有效的。这些标准将严重影响你的工作方式和您的工作文档:从收集需求到你的产品如何在客户现场部署和退役计划。这不是您和您的项目利益相关方单独决定是否你已经成功地在一个选择标准时达到了目标,还必须说服来自认可机构的第三方评估员,或者是在您的组织中扮演这部分角色的相关人员。这些标准大部分使用的是安全完整性等级概念的变种。所以根据您产品的分类,在你如何运用合适的标准时将会有一些变化。3.标准适用吗?让我们说一个有趣的问题:在我选择编程语言是要做什么呢?不可小视,它开始了。下表给出了如何选择一个合适的编程语言的建议,具体内容取决于您的应用程序或安全功能的安全完整性水平。人力资源是短缺的,这是一个普遍的共识。否则,即正当的理由,你可以备份100%。表A.3软件设计和开发支持工具与不编程语言技术/测量*参考SIL1SIL2SIL3SIL41合适的编程语言C.4.5HRHRHRHR2强类型编程语言C.4.1HRHRHRHR3语言子集C.4.2……HRHR4a认证工具和认证的翻译C.4.3RHRHRHR4b工具和翻译:增加使用者的信心C.4.4HRHRHRHR注释1看表C.3注释2在引用的第3栏中(这里内容翔实,但不规范)”B.x.x.x”,“C.x.x.x”表明IEC61508-7的附件B和C中给出技术/措施的详细说明。*依据安全完整性标准选择合适的技术和测量。替代或等效的技术/措施被由一个字母和其后的数字表示。它的目的是只有一个替代或等效的技术/措施应该被满足。合理的替代技术应根据附录C中给出的特定的应用需要的属性来选择。表1:来自IEC61508第3部分附录A表3.1说什么呢?正如你在表中看到的,使用合适的编程语言是被强烈建议的,但是真这么做确并没有很大的意义。但表中引用的C附录给出了一个合适的编程语言定义如下:语言应充分和明确的定义。语言应该是面向用户或问题的,而不是面向处理器/平台的。广泛使用的语言或它们的子集是首选的专用语言。语言应鼓励使用小的和可管理的软件模块;在特定的软件模块中限制对数据的访问;变量子范围定义;以及限制错误性构造的任何其他类型。让我们看看上述定义的各个部分,C是如何堆叠出他们来的:语言应充分明确定义:嗯......这取决于你如何考虑,可以说C99包含至少190未定义行为。语言应该是面向用户或问题的,而不是面向处理器/平台机器的:嗯,C最初创建是为PDP-11架构的系统开发语言;给定的一个特定目标一个特