0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

MISRA C在安全可靠编程中的地位

星星科技指导员 来源:嵌入式计算设计 作者:Yannick Moy 2022-11-23 11:55 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

C编程语言的普及,以及它的许多陷阱和陷阱,导致了MISRA C在C用于高完整性软件的领域取得了巨大的成功。这一成功促使工具供应商提出了许多MISRA C检查器的竞争实现。工具在它们帮助执行的MISRA C指南的覆盖范围上尤其竞争,因为不可能执行MISRA C的所有16个指令和143个规则(统称为指南)。

特别是,143 条规则中有 27 条是不可判定的,因此没有工具可以始终检测所有违反这些规则的行为,同时报告不构成违规的代码的“误报”。不可判定规则的一个例子是规则1.3:“不得发生未定义或关键的未指定行为。MISRA C:2012 的附录 H 列出了 C 编程语言标准中数百个未定义和关键未指定行为的案例,其中大多数无法单独判定。在大多数情况下,MISRA C 检查器忽略了不可判定的规则,例如规则 1.3,尽管已知违反这些规则会对软件质量产生巨大影响。

但是,对于其他编程语言,可以使用静态分析技术来应对这一挑战,而不会使用户误报淹没。一个例子是由AdaCore,Altran和Inria开发的SPARK工具集,它基于四个原则:

基础语言 Ada 通过定义明确的语言标准、强大的类型化和丰富的规范功能为静态分析提供了坚实的基础。

Ada 的 SPARK 子集通过控制歧义来源(如函数中的副作用和名称的别名)以基本方式限制基本语言以支持静态分析。

静态分析工具主要以单个函数的粒度工作,使分析更加精确,并最大限度地减少误报的可能性。

静态分析工具是交互式的,允许用户在必要时或需要时指导分析,并在用户提供的合同无法证明时提供反例。

SPARK 可以在 C 代码库中逐步采用,通过SPARK 采用的五个级别以及支持将形式分析 (SPARK) 与传统的基于测试的方法 (C) 相结合的“混合验证”来逐步获得保证。

火花石等级 - 基本保证

SPARK采用的第一级称为石头级。它对应于符合 Ada 的 SPARK 子集的代码。仅采用此级别即可保证许多无法对 C 强制执行的一致性属性。其中包括:

使用适当的包系统,而不是C使用基于文本的文件,没有翻译单元的一致性要求;

严格且可读的语法,强调清晰度并最大限度地减少“陷阱”,而不是 C 非常宽松的语法,这使得编写效果不是预期程序变得容易,

遵守 Ada 和 SPARK 的强类型规则,而不是 C 的“糟糕的类型安全性,允许发生广泛的隐式类型转换,这可能会损害安全性,因为它们的实现定义方面可能会导致开发人员混淆。(MISRA C:2012,附件C)

MISRA C试图通过各种准则来驯服C语言的这些可能的不一致之处。它特别定义了更强的类型规则(“基本类型模型”),并限制函数参数/结果和控制结构的使用。虽然这些避免了开发人员混淆的常见来源,但它们故意不是防弹的,否则它们会使大多数 C 程序非法。

这些基本保证在SPARK中很容易实现,通过一个名为GNATprove的工具进行简单的类似编译器的分析,这要归功于定义Ada的SPARK子集的更强大的规则。

SPARK 银级 - 强大的安全和安保保证

MISRA-C 指南还旨在防止更细微的错误、未初始化数据的读取、表达式中冲突的副作用以及未定义的行为,例如除以零或缓冲区溢出(这可能具有安全后果)。所有这些都属于不可判定规则的范畴,很少有MISRA C检查器提供完整的检测。

在 SPARK 采用的银牌级别完全可以防止这些情况,这对应于通过流分析(达到称为铜牌的 SPARK 采用的第二级)和证明没有运行时错误(达到第三级,即白银)来分析程序。要达到此级别,开发人员通常需要定义具有特定约束的类型,这些约束旨在支持和提供文件之间导出的函数的协定 - 使用所谓的前提条件来指定调用方的义务,以及后置条件来指定被调用方的义务。

达到银级的过程涉及与 IDE 的交互。开发人员运行 GNATprove 工具(可能在程序的子集上),调查 GNATprove 诊断,相应地更新程序,然后重复。GNATprove 在每一步都提供的详细信息促进了这种交互,以指导开发人员。以下是 GNATprove 显示的消息示例:

pYYBAGN9md-AUFN-AADbEpQjVIo527.png

在找到可能导致溢出的加法操作后,GNATprove 给出了一个触发问题的值的示例,这里是最大的整数值(在 SPARK 中表示为整数‘最后)。“检查原因”清楚地解释了加法的结果应该适合机器整数,如果 X 是加法前的最大整数值,则情况并非如此。然后,GNATprove 建议向函数 Incr 添加一个合适的前提条件可能会解决这个问题,在这里指定 X 不能是那个最大值。

超越银级的火花

使用SPARK还有更多的好处,远远超出了MISRA C检查器所能提供的。在黄金和白金级别,开发人员通过SPARK合同指定程序的属性,然后可以使用GNATprove 来保证这些属性将得到满足。开发人员还可以启用 GNATprove 警告来检测死代码(也是 MISRA C 追求的目标)和代码中的不一致,使用构成 GNATprove 分析基础的强大证明技术。

结论

从本质上讲,MISRA C追求的所有目标都可以在SPARK中最好地实现,结合更强大的基础语言(Ada)和强大的分析工具(GNATprove)。计划使用 MISRA C 规则的开发人员可以通过在其部分应用程序中采用 SPARK 来增强安全性。

MISRA C 中的规则代表了在关键应用程序中提高 C 代码可靠性的令人印象深刻的集体努力,重点是避免容易出错的功能,而不是强制实施特定的编程风格。然而,在基本层面上,MISRA C仍然建立在一种基础语言之上,而这种基础语言并不是为了支持大型高保证应用程序而设计的。很难将可靠性、安全性和安全性改造到一种从一开始就没有这些目标的语言中。

由于 C 仍将是像 Linux 内核这样的大型程序的基础语言,我们可以预见两种趋势的共存,以更好地防止 C 程序中的错误,MISRA C 可以发挥作用,并用更安全的语言(如 Rust 和 SPARK Ada )替换 C 作为部分代码。

审核编辑:郭婷

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 编程语言
    +关注

    关注

    10

    文章

    1959

    浏览量

    38899
  • 代码
    +关注

    关注

    30

    文章

    4941

    浏览量

    73129
  • 检查器
    +关注

    关注

    0

    文章

    16

    浏览量

    3670
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    C语言嵌入式开发的应用

    对外部事件做出响应并完成任务的系统,对任务的响应时间和执行时间有着严格的要求。C 语言实时系统开发具有重要的地位,它能够满足实时系统对高效性、确定性和
    发表于 11-21 08:09

    工业功能安全的基石:IEC 61508 标准深度解析与应用指南

    EC 61508——这项全球公认的功能安全基础标准,正是保障工业电气/电子/可编程电子系统(E/E/PE)安全可靠运行的终极防线。它不仅是技术规范,更是守护生命财产安全的工程哲学。
    的头像 发表于 11-09 17:53 1141次阅读

    安科瑞储能配套产品全场景解决方案,赋能储能系统安全可靠运行

    “双碳” 目标下,储能成为新型电力系统核心支撑。安科瑞打造涵盖数据监测、准确计量、安全防护、智能控制、系统协同的全链条解决方案,适配发电侧、电网侧、用户侧各类场景,保障储能系统安全可靠运行。
    的头像 发表于 09-29 09:34 321次阅读
    安科瑞储能配套产品全场景解决方案,赋能储能系统<b class='flag-5'>安全可靠</b>运行

    龙芯3B6000M处理器荣获安全可靠最高等级认证

    近日,中国信息安全测评中心发布《安全可靠测评结果公告(2025年第3号)》,龙芯3B6000M凭借卓越的性能表现和高水平的安全可靠性,成功入选目前最高等级Ⅱ级。
    的头像 发表于 09-16 11:33 1392次阅读

    智慧社区智能安全用电消防系统:构建安全可靠的社区用电环境

    随着城市化进程的加快,智慧社区建设已成为提升居民生活品质的重要方向。其中,智能安全用电消防系统作为社区安全的核心组成部分,通过物联网技术与传统用电设备的结合,有效解决了传统用电管理存在的监测滞后
    的头像 发表于 08-28 16:46 1142次阅读

    深圳双芯信息科技:国产飞腾OPS电脑,安全可靠自主可控

    信息技术飞速发展的当下,信息安全已上升至国家战略高度,各行业对自主可控、安全可靠的计算设备需求愈发迫切。深圳双芯信息科技有限公司敏锐洞察市场趋势,凭借深厚的技术沉淀与创新精神,推出的国产飞腾OPS
    的头像 发表于 06-19 16:52 1003次阅读
    深圳双芯信息科技:国产飞腾OPS电脑,<b class='flag-5'>安全可靠</b>自主可控

    开关电源安全保护电路:浪涌保护、过流保护、过压保护

    引言对于开关电源而言, 安全可靠性历来被视为重要的性能之一. 开关电源电气技术指标满足电子设备正常使用要求的条件下, 还要满足外界或自身电路或负载电路出现故障的情况下也能安全可靠
    发表于 05-20 14:19

    安全可控·国产典范—上海卓岚ZLAN5107-C全国产化 串口服务器助力工业通信自主化

    全国产化串口服务器ZLAN5107-C代表了工业通信设备自主创新的重要成果,为各行业数字化转型提供了安全可靠的基础设施。
    的头像 发表于 05-14 13:24 752次阅读
    <b class='flag-5'>安全</b>可控·国产典范—上海卓岚ZLAN5107-<b class='flag-5'>C</b>全国产化 串口服务器助力工业通信自主化

    Helix QAC 2025.1 重磅发布!MISRA C:2025® 100%覆盖

    Helix QAC 2025.1新增功能 Helix QAC 2025.1实现了对新版MISRA C:2025®标准的 100% 覆盖,并提供对应的合规模块。此版本还扩展了对 CERT C
    的头像 发表于 05-13 16:48 1112次阅读
    Helix QAC 2025.1 重磅发布!<b class='flag-5'>MISRA</b> <b class='flag-5'>C</b>:2025® 100%覆盖

    MISRA C:2025新标准解析:新增规则、优化点与静态代码分析工具支持(Perforce QAC、Klocwork)

    MISRA C:2025®发布!新增5条规则,并对部分现有规则进行了扩展、重组,以进一步简化安全关键型系统的开发流程。如何实现最新MISRA合规性?
    的头像 发表于 05-08 17:58 1840次阅读
    <b class='flag-5'>MISRA</b> <b class='flag-5'>C</b>:2025新标准解析:新增规则、优化点与静态代码分析工具支持(Perforce QAC、Klocwork)

    龙芯6款产品入围安全可靠测评Ⅱ级

    近日,中国信息安全测评中心发布《安全可靠测评结果公告(2025年第1号)》,龙芯3B6000、3C6000凭借卓越的技术实力和优异的产品表现成功入围,并被评定为目前最高等级Ⅱ级。至此,龙芯以40%占
    的头像 发表于 03-19 10:36 927次阅读

    今日看点丨传华为笔记本再无Windows可用;小米将“智能家居”商业模式引入日本

    (2025年第1号),深圳市海思半导体有限公司送测的麒麟X90赫然列,该CPU获得了安全可靠等级II级的评价。一同公布的还有飞腾腾云S5000C-E、龙芯3B6000、龙芯3
    发表于 03-17 11:41 1721次阅读

    安全可靠,飞腾D2000工控机让金融终端发展更有保障

    随着大数据时代的到来和物联网终端现实的普及和使用,金融终端设备的稳定性和安全性也成为许多金融企业需要面对的问题。
    的头像 发表于 03-11 09:07 466次阅读

    SMA插头拆卸教程:安全可靠的拆解方法

    通过以上步骤,您就可以较为安全、准确地完成 SMA 插头针式连接器的拆解工作。操作过程,一定要小心谨慎,遵循正确的方法和步骤,以避免对设备造成不必要的损坏。如果在拆解过程遇到困难
    的头像 发表于 03-10 09:37 1538次阅读
    SMA插头拆卸教程:<b class='flag-5'>安全可靠</b>的拆解方法

    天合储能户储电池系统荣获日本JET安全可靠认证

    。充分证明了天合储能产品的高度可靠性和安全性,同时也证明了天合多年深耕日本户用储能市场,研发认证团队对日本本地JIS标准深度解析的实力。 认证授予仪式 作为业界最严苛电池安全测试,JIS C
    的头像 发表于 12-07 19:21 1736次阅读