www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁(yè) > 嵌入式 > 嵌入式教程
[導(dǎo)讀]C++在嵌入式應(yīng)用中的安全問(wèn)題

在嵌入式系統(tǒng)的軟件設(shè)計(jì)中,“匯編語(yǔ)言+C語(yǔ)言”早已成為理所當(dāng)然的經(jīng)典組合。的確,對(duì)于硬件配置來(lái)說(shuō),匯編語(yǔ)言清晰明了;對(duì)于上層設(shè)計(jì)來(lái)說(shuō),C語(yǔ)言緊湊高效。這樣的搭配能夠滿足大多數(shù)傳統(tǒng)嵌入式系統(tǒng)應(yīng)用的需要。隨著技術(shù)水平的提高,今天的嵌入式系統(tǒng)也比過(guò)去更加深入到人們的日常生活中,大到汽車、飛機(jī)、火箭,小到手機(jī)、打印機(jī)、鬧鐘、手表,都可以找到嵌入式系統(tǒng)的蹤影。然而,這看似一成不變的情況,也在悄然轉(zhuǎn)變。隨著網(wǎng)絡(luò)、多媒體等技術(shù)的出現(xiàn)、發(fā)展與普及,對(duì)嵌入式系統(tǒng)應(yīng)用有了新的要求,也給了其他高級(jí)語(yǔ)言,特別是C++語(yǔ)言以機(jī)會(huì)。
    由此帶來(lái)的在語(yǔ)言使用中的安全問(wèn)題,目前雖然還未凸顯,但根據(jù)以往的經(jīng)驗(yàn)來(lái)看,終將成為限制行業(yè)發(fā)展的新瓶頸。已有的C++語(yǔ)言國(guó)際標(biāo)準(zhǔn)雖然龐大細(xì)致,但作為一個(gè)“語(yǔ)言標(biāo)準(zhǔn)”,只能是盡力做得面面俱到,其目標(biāo)在于構(gòu)造一個(gè)語(yǔ)句合法性的權(quán)威依據(jù),以約束人們對(duì)于C++的使用。但它并不是針對(duì)應(yīng)用而寫的規(guī)范,對(duì)于可能遇到的安全性問(wèn)題也無(wú)法進(jìn)行特別深入的探討,更加沒(méi)有安全方面的實(shí)踐經(jīng)驗(yàn)支撐。一個(gè)針對(duì)安全方面的、被國(guó)際所認(rèn)可的使用規(guī)范,無(wú)疑是C++語(yǔ)言在嵌入式系統(tǒng)中得到廣泛應(yīng)用的堅(jiān)實(shí)基礎(chǔ)與助推劑。

1 C++在嵌入式應(yīng)用中的機(jī)遇與挑戰(zhàn)
    C++作為一門高級(jí)語(yǔ)言,人們?cè)谔峒八鼤r(shí),總難免會(huì)談到C語(yǔ)言。直至今天,很多人對(duì)于C++語(yǔ)言的認(rèn)識(shí)依然是“C語(yǔ)言的超集”。這是因?yàn)镃++的起源與C語(yǔ)言有著千絲萬(wàn)縷的聯(lián)系。
    1978年,美國(guó)貝爾實(shí)驗(yàn)室的Dennis Ritchie和BrianKernighan在BCPL以及其簡(jiǎn)化版本B語(yǔ)言的基礎(chǔ)之上開(kāi)發(fā)了C語(yǔ)言,并合作出版了《The C Programming Lan-guage》。C語(yǔ)言迅速得到了大家的認(rèn)可,并廣為流傳。1989年,ANSI推出了第一個(gè)C語(yǔ)言的標(biāo)準(zhǔn)——X3.159-1989,并被ISO采納,隨之發(fā)布。ISO/IEC 9899-1990。早在C語(yǔ)言標(biāo)準(zhǔn)發(fā)布之前,貝爾實(shí)驗(yàn)室的Bjarne Stroustrup就致力于在C語(yǔ)言里增加類、函數(shù)類型檢查以及其他的一些優(yōu)秀特征,于1980年發(fā)布“C with Classes”。經(jīng)過(guò)持續(xù)的努力,他最終完成了對(duì)C語(yǔ)言的改造,由此創(chuàng)生出一門新語(yǔ)言——C++,并出版了《The C++ ProgrammingLanguage》一書。由于它帶來(lái)了持續(xù)的影響,ISO于1998年發(fā)布ISO/IEC 14882:1998;幾乎同一時(shí)間,ANSI也發(fā)布了類似標(biāo)準(zhǔn),這標(biāo)志著C++作為一門獨(dú)立語(yǔ)言的標(biāo)準(zhǔn)化得到了官方的認(rèn)可。
    統(tǒng)計(jì)數(shù)據(jù)表明,日常生活中一個(gè)美國(guó)人平均占用8個(gè)微控制器,這些都離不開(kāi)嵌入式系統(tǒng)的應(yīng)用。然而嵌入式系統(tǒng)軟件技術(shù)似乎落后于當(dāng)前的軟件發(fā)展形勢(shì),近年來(lái)才逐漸由匯編語(yǔ)言過(guò)渡到面向過(guò)程的C語(yǔ)言。但對(duì)于面向?qū)ο笳Z(yǔ)言的應(yīng)用還很有限。
    這一方面是由于嵌入式開(kāi)發(fā)人員多年來(lái)應(yīng)付有限資源的經(jīng)驗(yàn)而養(yǎng)成的保守態(tài)度,另一方面也是由于長(zhǎng)久以來(lái),嵌入式系統(tǒng)應(yīng)用設(shè)計(jì)中,人們要花費(fèi)許多精力在底層硬件的驅(qū)動(dòng)上,功能實(shí)現(xiàn)也主要局限在實(shí)時(shí)操作系統(tǒng)和相關(guān)支撐軟件的層次,并不涉及過(guò)多的應(yīng)用軟件開(kāi)發(fā)。這種在嚴(yán)苛條件下追求效率與實(shí)時(shí)性的任務(wù),其他的高級(jí)語(yǔ)言并沒(méi)有特別的優(yōu)勢(shì)。
    最近幾年,嵌入式系統(tǒng)領(lǐng)域又有了新的發(fā)展。首先,隨著手機(jī)、PDA等消費(fèi)性電子產(chǎn)品的飛速增長(zhǎng),嵌入式系統(tǒng)的市場(chǎng)規(guī)模在迅速擴(kuò)大,同時(shí)越來(lái)越多的智能嵌入式應(yīng)用場(chǎng)合需要互聯(lián)網(wǎng)的支持,這要求嵌入式系統(tǒng)的軟件具有更好的應(yīng)用性和更高的復(fù)雜性;其次,隨著芯片等相關(guān)領(lǐng)域的技術(shù)進(jìn)步,嵌入式系統(tǒng)工程師們不再需要時(shí)時(shí)刻刻去考慮資源是否夠用了。當(dāng)面向?qū)ο蟮母呒?jí)語(yǔ)言參與到嵌入式系統(tǒng)設(shè)計(jì)中去不再遙不可及時(shí),語(yǔ)言的效率則成為突出的問(wèn)題。根據(jù)《Thinking in C++》一書的總結(jié),C++與C的效率差別往往在±5%,這使得C++在新一輪的嵌入式應(yīng)用發(fā)展浪潮中占得先機(jī)。
    值得注意的是,盡管自1998年發(fā)布最初的C++標(biāo)準(zhǔn)——ISO/IEC 14882:1998以來(lái),每5年都會(huì)對(duì)此標(biāo)準(zhǔn)進(jìn)行一次更新,但是由于C++語(yǔ)言過(guò)于復(fù)雜,以及它經(jīng)歷了長(zhǎng)年的演變,直到2004年,沒(méi)有任何一款編譯器完全支持ISO C++。這對(duì)于時(shí)常要面對(duì)各種嚴(yán)苛條件的嵌入式系統(tǒng)應(yīng)用工程師們來(lái)說(shuō),是難以忍受的。同時(shí),即使是符合ISO C++標(biāo)準(zhǔn)的語(yǔ)句或者格式,對(duì)于實(shí)際的應(yīng)用場(chǎng)合來(lái)說(shuō),也存在著重大隱患,而不應(yīng)當(dāng)被直接采用。因此,人們迫切需要一個(gè)正式的基于安全角度考慮的C++語(yǔ)言使用規(guī)范。

2 關(guān)于MISRA
    MISRA(the Motor Industry Software Reliability As-sociation),即汽車工業(yè)軟件可靠性協(xié)會(huì),于1994.年在英國(guó)成立,以“協(xié)助汽車工業(yè)提供安全、可靠的軟件”為使命,期望通過(guò)“規(guī)范指南”的形式來(lái)約束人們?cè)谄囯娮右约捌渌度胧较到y(tǒng)開(kāi)發(fā)領(lǐng)域或涉及安全與可靠性的領(lǐng)域中對(duì)于程序語(yǔ)言的使用。由于這些“規(guī)范指南”都是從大量工程實(shí)踐中總結(jié)的第一手經(jīng)驗(yàn),因而具有極高的指導(dǎo)意義。
    經(jīng)過(guò)4年準(zhǔn)備,它在1998年發(fā)布了一個(gè)針對(duì)汽車工業(yè)的《Guidelines for the Use of the C Langtlage in VehicleBased Software》,簡(jiǎn)稱“MISRA C:1998‘’,針對(duì)那些滿足C語(yǔ)言標(biāo)準(zhǔn),卻存在安全隱患的語(yǔ)言使用習(xí)慣,提出了127條規(guī)則。由于它很好地解決了C語(yǔ)言國(guó)際標(biāo)準(zhǔn)的冗繁性,以及其中對(duì)于安全性考慮的不足性,從而得到了廣泛的好評(píng)。MISRA-C不僅成為眾多汽車廠商推崇的行業(yè)標(biāo)準(zhǔn),其影響力更是遠(yuǎn)遠(yuǎn)超出了汽車工業(yè),得到鐵路、航空航天、國(guó)防、醫(yī)療等眾多領(lǐng)域的認(rèn)可,成為“最佳實(shí)踐”解決方案。2004年,MISRA對(duì)于已有的規(guī)則進(jìn)行改編與擴(kuò)充,推出了“MISRA C 2004”,首次將該規(guī)范指南的對(duì)象從汽車工業(yè)推廣到所有具有安全性要求的系統(tǒng)應(yīng)用中去,包含了強(qiáng)制規(guī)則121條,推薦規(guī)則20條,并刪除了15條舊規(guī)則,共計(jì)含有141條規(guī)則。
    時(shí)至今日,MISRA組織不僅是汽車工業(yè)軟件規(guī)范的權(quán)威,其制定的規(guī)范指南更得到了嵌入式系統(tǒng)應(yīng)用領(lǐng)域的廣泛認(rèn)可??紤]到近年來(lái),C++語(yǔ)言在嵌入式系統(tǒng)中的應(yīng)用越來(lái)越多,2005年MISRA C++委員會(huì)成立,并于2008年推出針對(duì)C++語(yǔ)言的《MISRA C++:2008——Guidelines for the USe of the C++ language in critical sys-tems>>,以下簡(jiǎn)稱“MISRA C++:2008”。有興趣的讀者可以聯(lián)系相關(guān)網(wǎng)站:http://www.misra-cpp.com/,購(gòu)買詳細(xì)的文檔。
    MISRA C++:2008同樣從推出之日起,就得到了業(yè)內(nèi)外廣泛關(guān)注。例如:LDRA軟件公司一直跟蹤著MIS-RA C++:2008的制定進(jìn)展,在MISRA C++:2008發(fā)布時(shí)同步宣稱已經(jīng)完成了對(duì)工具套件產(chǎn)品的相應(yīng)改進(jìn),使其符合MISRA C++:2008標(biāo)準(zhǔn)。(LDRA的Testbed產(chǎn)品曾成功用于“神舟”飛船項(xiàng)目的軟件測(cè)試)


3 MISRA C++概述
   
作為規(guī)范指南,MISRA C++:2008基于ISO/IEC 14882:2003的C++語(yǔ)言國(guó)際標(biāo)準(zhǔn),以規(guī)則(rule)的形式,給出了相關(guān)的建議。它的規(guī)則又細(xì)分為以下3種類型:
    ①?gòu)?qiáng)制型(required),必須符合、允許例外;
    ②推薦型(advisory),推薦符合;
    ③不容討論型(document),必須符合、不許例外。
    MISRA C++:2008中共給出了20個(gè)大類的規(guī)則(編號(hào)并不連續(xù)),細(xì)分為228條。詳細(xì)情況如表1所列。

    [!--empirenews.page--]文檔中所有規(guī)則的書寫格式如下:


    每條規(guī)則之后都有詳細(xì)的解釋,并給出了一些具體的程序語(yǔ)句作為例子。下面分別針對(duì)上述3種規(guī)則類別,進(jìn)行舉例說(shuō)明。
    規(guī)則0-1-1(強(qiáng)制)工程中不允許包含無(wú)法觸及的代碼


    上述例子里,條件判斷中的賦值語(yǔ)句和return語(yǔ)句之后的自增語(yǔ)句都是在任何條件下都無(wú)法觸及的死代碼,不允許這樣使用。 
    規(guī)則0-1-2 (強(qiáng)制) 工程中不允許含有永遠(yuǎn)不會(huì)被執(zhí)行的路徑
    enum ec{RED,BLUE,GREEN)col;
    if(col<=GREEN) //不符合規(guī)則,條件永遠(yuǎn)為真
    {
    //Will always get,here
    }
    else
    {
    //代碼永遠(yuǎn)不會(huì)到達(dá)這里
    }
    由于枚舉類型有默認(rèn)的初始賦值0,1,2,…,故col永遠(yuǎn)≤GREEN。上述例子中,含有任何條件下都不會(huì)被執(zhí)行的路徑,不允許這樣使用。
    規(guī)則5-2-10(推薦) 自增(++)/自減(--)運(yùn)算符不應(yīng)與表達(dá)式中其他運(yùn)算符混合使用諸如下面的例程將導(dǎo)致理解上的混淆以及結(jié)果的不確定,在程序設(shè)計(jì)時(shí)應(yīng)盡可能避免。
    u8a=++u8b+u8c-; //不符合規(guī)則
    規(guī)則0-4-2 (不容討論) 對(duì)于浮點(diǎn)運(yùn)算(floating-point)算法的使用,必須給出記錄
    安全的使用浮點(diǎn)算法需要具有較高的數(shù)字分析技能和對(duì)編譯器及硬件對(duì)象的深入了解。因此在使用浮點(diǎn)算法時(shí),必須先進(jìn)行分析:是否必須使用它、采取的方法是否可行、過(guò)程是否得到了正確的執(zhí)行,并將上述結(jié)果做出記錄。
    規(guī)則16-6-1 (不容討論) 所有的庫(kù)函數(shù)代碼必須符合MISRA C++
    上述這些例子只是為了讓大家對(duì)MISRA C++:2008的3種規(guī)則有一定的認(rèn)識(shí),我們會(huì)結(jié)合相關(guān)內(nèi)容,在接下來(lái)的幾篇文章中進(jìn)一步討論學(xué)習(xí)。不難發(fā)現(xiàn),許多違反了MISRA C++:2008中規(guī)則的例程都是符合C++語(yǔ)言標(biāo)準(zhǔn)的,但出于安全性考慮,應(yīng)當(dāng)被禁止或者謹(jǐn)慎使用。通覽之后,往往會(huì)發(fā)現(xiàn)自己平時(shí)從未注意的一些編程習(xí)慣,都已經(jīng)被嚴(yán)令禁止。它們有些是明顯有礙安全性的,有些則相對(duì)隱蔽。
    然而MISRA的號(hào)召力是不容小覷的。以嵌入式實(shí)時(shí)操作系統(tǒng)μC/OS-II為例,其2.52版本雖然已經(jīng)于2000年通過(guò)了美國(guó)航空管理局(FAA)的安全認(rèn)證,但2003年μC/OS-II的作者就根據(jù)MISRA C:1998規(guī)范又對(duì)源碼作了相應(yīng)的修改,并發(fā)布了2.62的新版本,宣稱其源代碼99%符合MISRA C:1998的要求。

4 安全性問(wèn)題
   
對(duì)于安全性,MISRA給出以下5種可能的安全問(wèn)題來(lái)源:開(kāi)發(fā)人員的錯(cuò)誤、開(kāi)發(fā)人員對(duì)于語(yǔ)言的誤解、編譯器沒(méi)有按照開(kāi)發(fā)人員的預(yù)期工作、編譯器本身含有錯(cuò)誤、運(yùn)行錯(cuò)誤。
    這些錯(cuò)誤的來(lái)源與實(shí)際使用的是何種計(jì)算機(jī)語(yǔ)言沒(méi)有關(guān)系,可以說(shuō)比較全面地包含了嵌入式系統(tǒng)開(kāi)發(fā)以及其他相關(guān)的軟件設(shè)計(jì)中可能導(dǎo)致安全問(wèn)題的所有渠道。
    作為C++這樣一門面向?qū)ο蟮母呒?jí)語(yǔ)言(由于其與C的淵源,嚴(yán)格地說(shuō),C++是具有某些面向?qū)ο筇卣鞯倪^(guò)程語(yǔ)言),通過(guò)類、函數(shù)參數(shù)類型檢查、模版、異常處理以及派生、繼承、多態(tài)等手段,使得其在保有高效率的同時(shí),實(shí)現(xiàn)了強(qiáng)大的功能,并帶來(lái)了自頂向下的模塊化程序設(shè)計(jì)理念。但編程靈活度的提高,也令其代碼復(fù)雜而易錯(cuò)。與C語(yǔ)言相比,它所面對(duì)的安全問(wèn)題將更為隱蔽,更加難以發(fā)現(xiàn)。但就對(duì)數(shù)據(jù)的封裝而言,C++遠(yuǎn)遠(yuǎn)優(yōu)于C,只要參照合理的規(guī)范指南,進(jìn)行項(xiàng)目的開(kāi)發(fā),就可以通過(guò)充分發(fā)揮C++靈活的特點(diǎn),應(yīng)用到更多更廣的工程領(lǐng)域。

5 行業(yè)展望
    標(biāo)準(zhǔn)與規(guī)范從來(lái)沒(méi)有如眼下這般備受重視過(guò)。一個(gè)權(quán)威的標(biāo)準(zhǔn)或規(guī)范,不僅將成為相關(guān)領(lǐng)域的“金科玉律”,更是行業(yè)動(dòng)向的風(fēng)向標(biāo)??梢哉f(shuō)正是由于MISRA-C的存在,使得在高級(jí)語(yǔ)言種類繁多的今天,C語(yǔ)言的地位依然無(wú)可替代。
    此次MISRA攜著在C語(yǔ)言上的巨大成功,選擇了C++語(yǔ)言進(jìn)行新的規(guī)范化嘗試,不僅因?yàn)镃++語(yǔ)言的群眾基礎(chǔ)深厚,更是表明了嵌入式系統(tǒng)領(lǐng)域內(nèi)大多數(shù)專家的觀點(diǎn):如果說(shuō)未來(lái)能有一門語(yǔ)言取代目前C語(yǔ)言在嵌入式系統(tǒng)應(yīng)用中的地位的話,也只能是C++語(yǔ)言。一名成功的嵌入式系統(tǒng)工程師,必須是對(duì)行業(yè)動(dòng)向極為敏感的,也只有這樣,才能在知識(shí)爆炸的今天緊跟時(shí)代潮流。從使用C語(yǔ)言到使用C++語(yǔ)言是一個(gè)巨大的跨越,決不僅僅像使用“增強(qiáng)的C”那么簡(jiǎn)單,需要從現(xiàn)在就開(kāi)始學(xué)習(xí)。而從學(xué)習(xí)之初就養(yǎng)成的良好的語(yǔ)言使用習(xí)慣,將決定將來(lái)進(jìn)階的速度與可能性。MISRA C++:2008無(wú)疑是培養(yǎng)這樣良好習(xí)慣的最佳手冊(cè)。

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

倫敦2024年8月29日 /美通社/ -- 英國(guó)汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開(kāi)發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來(lái)越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來(lái)越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場(chǎng)的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開(kāi)幕式在貴陽(yáng)舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語(yǔ)權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營(yíng)業(yè)績(jī)穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤(rùn)率延續(xù)升勢(shì) 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長(zhǎng) 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競(jìng)爭(zhēng)力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競(jìng)爭(zhēng)優(yōu)勢(shì)...

關(guān)鍵字: 通信 BSP 電信運(yùn)營(yíng)商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國(guó)電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場(chǎng) NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長(zhǎng)三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡(jiǎn)稱"軟通動(dòng)力")與長(zhǎng)三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉