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

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

3天内不再提示

如何提高嵌入式应用程序的安全性和可靠性

星星科技指导员 来源:embedded 作者:Semir Haddad 2023-05-04 09:39 次阅读

在最近的一篇文章中,嵌入式系统顾问Jacob Beningo提出了一个问题,即是否是时候退役C编程语言了,因为它在复杂性和潜在错误以及C开发人员短缺方面的局限性。作为回应,Andrei Gorine 认为 C 的紧凑占用空间使其比 JavaC# 和 Go 等资源密集型现代语言更具竞争力。

此外,C 语言直接控制应用程序行为和内存的能力使其成为需要近距离访问硬件资源(如中断和外围设备)的系统的唯一可行选择。对于嵌入式设备尤其如此,因为它们的基础操作系统、驱动程序和相关 API 也倾向于用 C 语言编写。

但是,这种高度灵活的控制级别可能会导致运行时行为出现问题。无论 C 语言最终是否停用,开发人员都需要当今的工具来确保应用程序的安全性和可靠性不会因人为错误或嵌入式设备日益互联而受到损害。开发人员需要像管理高级语言一样管理 C,以增强应用程序的安全性和可靠性。

托管 C 与非托管 C

C 语言与现代语言(如 Java、JavaScript 和 Python)之间的主要区别之一是后者的实现是托管的。这意味着代码由运行时环境执行,该运行时环境确保其在内存边界、安全原则和优化范围内正确管理和执行。

相比之下,C 语言是非托管的,这意味着程序员必须手动管理内存分配和释放。这使得代码更容易受到安全漏洞的影响,例如缓冲区溢出和内存泄漏。权衡是 C 代码通常比托管代码更快、更高效,但需要更多的努力来编写和维护。

下面是托管 C 代码和非托管 C 代码之间主要区别的摘要:

托管代码 非托管代码
由公共语言基础结构(运行时)执行 处理器编译和执行
不会发生内存缓冲区溢出 可能发生内存缓冲区溢出
提供内存保护并降低内存泄漏的风险 内存不受保护,分配函数和指针使用不当会导致内存损坏和系统崩溃
提供异常处理和内存清理等服务 不提供这些服务
可以轻松移植到不同的平台,因为运行时环境抽象了硬件和操作系统的细节 无法轻松移植,需要工程团队经常从头开始
运行时环境强制实施安全功能,例如类型安全和访问控制 开发人员负责编写安全可靠的代码,这可能会增加出错的风险

将两全其美相结合:C 应用程序与用高级语言编写的应用程序的可靠性

软件容器使开发人员能够在运行时环境中有效地管理 C 应用程序,尽管内存分配仍然需要手动管理。这是因为容器化为每个应用程序提供了一个安全且隔离的空间,从而降低了由于内存错误而导致系统崩溃的可能性。

托管 C 中的动态链接允许安装新包,而无需开发人员重新编译整个程序,从而节省开发时间。此功能传统上与 Linux 相关联,现在可以通过使用小型软件容器获得,并在支持热代码替换的同时提供增强的可移植性和安全性。

MICROEJ VEE是一个微型软件容器的一个例子,它为托管C,Java和JavaScript应用程序提供了沙盒机制。所有组件都由同一个运行时环境管理,确保安全可靠的共存。通过这种方法,工程师可以重复使用组件,确信它们将可靠、安全地工作。

使用安全软件容器来隔离每个应用程序,允许用不同编程语言编写的多个应用程序无缝共存,从而提供了显着的优势。通过将托管 C 与安全容器相结合,这种方法弥合了嵌入式和企业开发之间的差距。托管 C 提供了 C 的灵活性,同时使开发人员无需管理安全内存、多任务同步和执行其他低级任务。

这种方法还有助于在 C 语言中集成遗留代码和现有软件堆栈。这对于实现用嵌入式 C 语言编写的协议特别有用,包括云连接器、Matter、LWM2M 和 MQTT。它也是MISRA C指南的补充,因为它克服了低级健壮性和安全问题。最后,像 MICROEJ VEE 这样的容器允许动态链接,这意味着托管 C 可以动态链接和取消链接,就像用 VEE 容器支持的任何其他语言编写的代码一样。

将托管和非托管 C 组合在一起以获得最佳结果

使用安全软件容器并不意味着需要管理所有 C 代码。在像 MICROEJ VEE 这样的虚拟执行环境中,非托管 C 代码(也称为本机代码)仍然可以发挥作用。所有直接与硬件和CPU寄存器接口的低级驱动程序和板级支持包都应在C语言中保持不受管理的状态,以最好地利用C与硬件的紧密联系。

相比之下,对于更复杂的应用程序任务,使用托管代码更方便、更高效。由于关注点分离,托管代码提高了工作效率并减少了错误,并使代码更具可移植性。

托管和非托管代码库仍可以通过抽象层和本机接口以受控方式进行交互。它称为简单本机接口或 SNI,它允许任何托管代码调用本机函数、传递参数、获取返回值并在专用空间中操作共享内存。

托管代码中的高级堆栈和非托管代码中的低级别硬件接口的这种拆分提供了理想的组合。

托管 C:未来的 C 语言

在复杂且不断变化的开发环境中,开发人员必须能够访问利用最新硬件创新的尖端软件和语言解决方案。尽管 C 语言是嵌入式开发中的领先语言,但仍需要使用工具和流程来管理其运行时行为,这些工具和流程可以释放托管代码的所有优势,以加速创新。

通过简化开发过程并将安全性和可靠性卸载到运行时,托管 C 使开发人员能够提高其应用程序的健壮性、安全性和可移植性,同时保持熟悉的编程语言。随着技术的不断发展,采用托管 C 代码解决方案的开发人员将能够更好地创建创新、安全和可靠的连接产品

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

    关注

    5069

    文章

    19023

    浏览量

    303437
  • JAVA
    +关注

    关注

    19

    文章

    2960

    浏览量

    104557
  • 应用程序
    +关注

    关注

    37

    文章

    3244

    浏览量

    57610
收藏 人收藏

    评论

    相关推荐

    嵌入式软件可靠性测试方法

    嵌入式软件可靠性测试方法
    发表于 11-05 17:18

    嵌入式系统产品的可靠性

    关注有助于确保整个终端设备可靠性要求的装置。集成电路在嵌入式系统的性能、尺寸和整体成本方面已经实现重大突破,对各种存储元件的依赖及使用小尺寸硅工艺技术可能产生的永久和瞬时误差对可靠性产生了影响。 将众多
    发表于 08-30 14:43

    嵌入式软件的可靠性测试与可靠性增长评估

    关于嵌入式等软件可靠性安全性测试与评估的资料,希望有帮助。
    发表于 06-17 16:53

    开发高可靠性嵌入式系统的技巧有哪些?

    尽管许多嵌入式工程师充满了希望和梦想,但高可靠性的代码不是一蹴而就的。它是一个艰苦的过程,需要开发人员维护和管理系统的每个比特和字节。当一个应用程序被确认为“成功”的那一刻,通常会有一种如释重负
    发表于 09-29 08:10

    如何提升嵌入式系统的VxWorks安全性

    实时嵌入式系统与网络的结合以及高可信覆盖网络的发展使得嵌入式实时操作系统的安全性问题日益突出。提高实时嵌入式系统的
    发表于 10-30 06:03

    嵌入式实时多任务操作系统的安全性怎么样?

    许多实时操作系统本身就有不安全性和不可靠性,这些不安全因素就给黑客的入侵和病毒的攻击留下了可趁之机。操作系统是最基本的系统软件,它是对硬件系统的第一次扩充,同时给用户提供一个更容易理解和进行
    发表于 03-06 06:27

    嵌入式设备如何提高安全性

      随着越来越多的嵌入式设备接入网络并成为物联网的一部分,网络黑客们开始利用这些连接,以达到自己不可告人的目的。因此,嵌入式设备必须提高安全性,以防止黑客复制IP、盗窃数据或侵入系统,可是对于
    发表于 06-30 11:05

    单片机应用系统的可靠性可靠性设计

    现代电子系统的可靠性现代电子系统具有如下特点:嵌入式的计算机系统.智能化的体系结构;以计算机为核心的柔性硬件基础,由软件实现系统的功能;硬件系统有微电子技术的有力支持。单片机应用系统是当前最典型、最广
    发表于 01-11 09:34

    如何对嵌入式软件进行可靠性测试

    摘 要 本文针对目前嵌入式软件设计可靠性测试用例的手段主要依靠手工分析,沿用传统的软件测试用例设计方法进行,不能够满足可靠性测试用例设计的基本要求的问题,设计了一套行之有效的可靠性测试
    发表于 10-27 06:10

    嵌入式软件可靠性测试方法是什么

    本文原文链接如下:https://www.jianshu.com/p/f6f5c3cd3fab目前,嵌入式软件的可靠性评价主要依赖测试,因为嵌入式软件的开发环境和软件在嵌入式系统中的运
    发表于 12-21 07:09

    嵌入式软件的安全可靠性控制

    不同的嵌入式系统对其安全可靠性的要求是不一样的。一般说来,嵌入式系统对可靠性安全性的要求要高于非嵌入式
    发表于 04-22 16:49 21次下载

    嵌入式系统软件可靠性设计

    本文分析了 嵌入式系统软件的复杂度、可靠性与稳定性之间的关系,本给出了增加嵌入式系统可靠性的一般方法。
    发表于 11-17 17:43 38次下载

    嵌入式系统的可靠性设计

    嵌入式应用系统是一个有计算机内核,软、硬件整合的智能化电子系统。与传统的激励响应型电子系统的本质差异,是它的智力嵌入,从而形成嵌入式应用系统全新的可靠性设计观念、方法与技术。这些全新的
    发表于 11-30 10:04 1344次阅读
     <b class='flag-5'>嵌入式</b>系统的<b class='flag-5'>可靠性</b>设计

    嵌入式系统硬件可靠性分析

    嵌入式系统硬件的可靠性是十分重要的,它直接关系到嵌入式系统的质量和寿命。为了对嵌入式系统的硬件可靠性进行分析,利用Copula方法从硬件角度
    发表于 01-17 13:46 1次下载
    <b class='flag-5'>嵌入式</b>系统硬件<b class='flag-5'>可靠性</b>分析

    可靠性安全性

    安全性促进可靠性设计:安全性要求通常会推动可靠性设计的实施。为了满足安全性要求,产品设计人员需要考虑风险评估、故障预防和容错设计等措施。这些
    的头像 发表于 07-12 10:44 5940次阅读