C++在嵌入式應用中的安全問題

2020-12-07 電子產品世界

嵌入式系統的軟體設計中,「彙編語言+C語言」早已成為理所當然的經典組合。的確,對於硬體配置來說,彙編語言清晰明了;對於上層設計來說,C語言緊湊高效。這樣的搭配能夠滿足大多數傳統嵌入式系統應用的需要。隨著技術水平的提高,今天的嵌入式系統也比過去更加深入到人們的日常生活中,大到汽車、飛機、火箭,小到手機、印表機、鬧鐘、手錶,都可以找到嵌入式系統的蹤影。然而,這看似一成不變的情況,也在悄然轉變。隨著網絡、多媒體等技術的出現、發展與普及,對嵌入式系統應用有了新的要求,也給了其他高級語言,特別是C++語言以機會。

本文引用地址:http://www.eepw.com.cn/article/150695.htm

  由此帶來的在語言使用中的安全問題,目前雖然還未凸顯,但根據以往的經驗來看,終將成為限制行業發展的新瓶頸。已有的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/,購買詳細的文檔。

  MISRA C++:2008同樣從推出之日起,就得到了業內外廣泛關注。例如:LDRA軟體公司一直跟蹤著MIS-RA C++:2008的制定進展,在MISRA C++:2008發布時同步宣稱已經完成了對工具套件產品的相應改進,使其符合MISRA C++:2008標準。(LDRA的Testbed產品曾成功用於「神舟」飛船項目的軟體測試)

 3 MISRA C++概述

  作為規範指南,MISRA C++:2008基於ISO/IEC 14882:2003的C++語言國際標準,以規則(rule)的形式,給出了相關的建議。它的規則又細分為以下3種類型:

  ①強制型(required),必須符合、允許例外;

  ②推薦型(advisory),推薦符合;

  ③不容討論型(document),必須符合、不許例外。

  MISRA C++:2008中共給出了20個大類的規則(編號並不連續),細分為228條。詳細情況如表1所列。

相關焦點

  • PCBA與嵌入式開發
    基於PCBA板的嵌入式系統的開發嵌入式系統的開發分為嵌入式軟體開發和嵌入式硬體開發,PCBA正是嵌入式硬體開發的基礎。什麼是嵌入式系統(1) 嵌入式系統的基本介紹嵌入式系統應定義為:嵌入到對象體系中的專用計算機系統。嵌入性、專用性與計算機系統是嵌入式系統的三個基本要素。嵌入式開發就是指在嵌入式作業系統下進行開發,一般常用的系統有ucos,linux,android等。
  • IoT設備中嵌入式微控制器的安全機制
    嵌入式設備的安全性對於阻止黑客獲得其控制權至關重要,更糟糕的一種情況是,黑客可能會對設備的連接系統發起更具破壞性的攻擊。但是,遠程攻擊只是對手採取的其中一種方式,對物理硬體設備的本地攻擊則是獲取機密信息的另一種方法,這些攻擊包括訪問系統驗證密碼,甚至包括應用代碼本身的智慧財產權等。本文將回顧在嵌入式微控制器中配置強大而可靠嵌入式安全機制的基本概念。
  • 嵌入式Web伺服器技術及其在電力系統中的應用綜述
    為了提高生產效率和管理水平,遠程監控和生產過程控制等系統很適合應用Web技術,從瀏覽器上直接監控現場設備的運行。但作為實時性要求較高的面向任務的系統,必須解決基於Web應用的實時性問題、系統結構問題和安全性等問題。而嵌入式Web伺服器技術作為結合了Web技術和現場工作要求特點的一項新技術,是一種很好的解決方案。
  • 嵌入式Linux開發環境的搭建之:嵌入式開發環境的搭建
    本文引用地址:http://www.eepw.com.cn/article/257141.htm5.1嵌入式開發環境的搭建5.1.1嵌入式交叉編譯環境的搭建linux作業系統文章專題:linux作業系統詳解(linux不再難懂)交叉編譯的概念在第4章中已經詳細講述過,搭建交叉編譯環境是嵌入式開發的第一步,也是必備的一步。
  • 基於Yocto Project的嵌入式應用設計
    本設計主要基於Yocto Project在嵌入式設備上輕鬆定製嵌入式Linux應用,並實現Yocto Project的定製過程。但現有的嵌入式Linux市場開始分化,現有的選擇包括半導體廠商提供的實例方案、嵌入式OSV提供商應用的嵌入式Linux產品、嵌入式產品開發商的自有方案和開源項目等。由於缺乏一致性,造成了嵌入式開發高昂的維護成本,不僅嵌入式開發缺乏足夠的專業人員,而且開發過程存在安全漏洞問題。在Yocto Project項目中,可以使用許多高效的工具,從而輕鬆定製嵌入式Linux產品。
  • 嵌入式Web伺服器GoAhead在電力系統通信中應用
    簡單介紹GoAhead嵌入式Web伺服器的基本特點,接著講解了嵌入式Web配置管理功能在電力系統通信中應用的工作原理及設計方法。以工業乙太網交換機為實例,介紹了軟體系統功能,並詳細討論了軟體系統工作流程。
  • 華北工控 | 嵌入式計算機在測量機器人中的應用
    測量機器人具有高智能、高精度、高自動化等特點,目前已在地鐵隧道監測、橋梁變形監測、地理信息監測、水庫工程監測等領域廣泛地被應用,市場前景廣闊。      圖片來源:網絡  在地鐵隧道施工和運營過程中,為避免自然或人為原因導致的地鐵隧道變形等問題
  • 談GJB5000A二級在中小型嵌入式軟體研發中的應用
    摘要:結合軟體項目在GJB5000A二級的實踐過程,針對過程中發現的問題和失誤,分析了中小型嵌入式軟體這次實踐有效地提高了軟體研製的工程化水平,但是同時也發現了許多問題和和失誤。通過管理人員和技術人員的分析和總結,得出結論:GJB5000A二級的應用需要關注的兩方面工作重點,一是建立適應於中小型嵌入式軟體的高效的項目管理體系,二是利用軟體測試技術提高軟體的可靠性,保證軟體的質量。
  • 在嵌入式網關中CAN總線有什麼應用?
    在嵌入式網關中CAN總線有什麼應用?而為了使這一趨勢得以實現,連接Internet網絡的嵌入式網關是其關鍵。 從現實來看,乙太網擴展了現有的系統,但是現場總線不可能完全被工業乙太網替代,後者的潛力巨大,其應用領域一定會不斷擴大。所以,將現場總線與乙太網結合,從而實現底層生產與上層管理的緊密集成,已經成為一種趨勢。
  • C++程式設計師的職業生涯規劃
    windows /linuxc++ (QT和MFC,偏前端) 1、3年以上Visual C++開發經驗 2、熟練掌握C、C++、ATL、COM等編程技術。 兩年以上的嵌入式或windows平臺QT應用軟體開發經驗. 熟悉QT跨平臺框架,QT圖形庫和相應的開發工具。至少參加過一個完整的QT項目。
  • Xilinx與Silicon開啟硬體圖像處理機器視覺應用大門
    機器視覺系統設計方法,為那些從事和尋找先進的、高性能機器視覺解決方案的嵌入式系統架構師、軟體工程師、硬體工程師帶來前所未有的嵌入式設計體驗。即使是軟體編程人員和應用工程師都能夠編程FPGA,完全不需要硬體設計的專門知識。
  • 電源模塊在嵌入式系統設計中如何選型?看完就學會了
    電源模塊在嵌入式系統設計中如何選型?其中DC/DC電源模塊又以其體積小巧、性能優異、使用方便、綜合成本低等顯著特點,在通信、網絡、工控、鐵路等領域得到廣泛的應用。 那麼,在型號繁多,參數各不相同,品牌眾多的電源模塊中,怎樣篩選出既合適,性價比又高的DC/DC電源模塊呢?一般標準選型方法大家都比較熟悉,這次我們講點不一樣的,講講嵌入式系統設計時DC/DC電源模塊選型時比較容易糾結的幾個問題。
  • 基於MySQL資料庫應用開發實現嵌入式數控系統的設計
    基於MySQL資料庫應用開發實現嵌入式數控系統的設計 鄔依林 , 黃瑛 發表於 2020-12-02 10:07:37 1 引言 本文所論述是數控系統大課題中人機互動的外圍部分子課題中的資料庫開發應用
  • 嵌入式系統中USB主機控制器的設計
    過去USB僅應用於個人計算機,而在嵌入式系統領域的巨大潛力還沒有開發出來,USB在嵌入式系統中的應用包括本文將介紹在嵌入式系統中應用USB時其主機控制器的設計。
  • 在VIM中實現對嵌入式軟體的調試
    因此,在VIM中實現對嵌入式軟體的調試,我們便得到了一個高效、穩定的嵌入式Linux的開發環境。1 gdb對嵌入式軟體的調試模式 許多非Linux的嵌入式系統已經在使用gdb與gdbstub對目標板進行遠程「交叉調試」;然而,因為Linux內核實現了ptrace()系統調用,所以在對嵌入式應用程式進行調試的時候並不需要gdb stub,而採用gdb套件提供的gdb伺服器來對目標板上的嵌入式應用程式進行調試。
  • 深入研究嵌入式web伺服器視頻監控的應用
    據分析,嵌入式Internet系統在Internet電話、遊戲裝置和手持式通信裝置的推動下將會有突飛猛進的發展。由於Internet技術的滲透,嵌入式系統正變得越來越智能化並具有越來越多的網絡友好特性;又由於Web技術的飛速發展,給嵌入式系統帶入Internet提供了絕佳的途徑。嵌入式web技術是視頻監控系統設計應用最廣泛的技術之一。
  • 利用Yocto創建獨有的嵌入式 Linux 應用
    作為靈活多變且經濟高效的解決方案,嵌入式 Linux展現了巨大的價值,並廣泛應用於消費電子設備、網絡設備、零售點和行業應用程式。然而,廣泛的應用也意味著多樣化的業務需求,嵌入式解決方案開發人員必須構建定製Linux 版本來滿足其特定需求。
  • 嵌入式電磁爐好嗎 嵌入式電磁爐怎麼安裝【方法介紹】
    摘要:嵌入式電磁爐是將電磁爐嵌入到廚房的檯面上,那麼嵌入式電磁爐好不好呢?嵌入式電磁爐使用起來非常方便,可用來進行煮、炸、煎、蒸、炒等各種烹調操作。具有效率高、體積小、重量輕、噪音小、省電節能、安全環保等特點。嵌入式電磁爐的安裝需要注意些什麼呢?下面小編就為您講解。
  • 國際嵌入式大會在紫金山實驗室舉行
    大會以「5G,新基建創造新生態」為主題,圍繞行業應用、技術發展等角度,探討5G新基建下的嵌入式、大數據、數字經濟的發展機遇。中國國際嵌入式大會(Embedded China)在國家科技部、國家工信部和上海市科委等部門的指導下,自2008年創辦以來,已連續舉辦了12屆。
  • 嵌入式系統在大射電望遠鏡5米模型上懸索控制中的應用
    摘 要:介紹了ARM9和嵌入式實時作業系統μC/OS-II在大射電望遠鏡5米模型上懸索控制中的應用。給出了在嵌入式實時作業系統μC/OS-II下的多任務應用軟體的設計實例,並成功實現了六軸聯動。