C++在嵌入式應(yīng)用中的安全問題
規(guī)則16-6-1 (不容討論) 所有的庫函數(shù)代碼必須符合MISRA C++
上述這些例子只是為了讓大家對MISRA C++:2008的3種規(guī)則有一定的認(rèn)識,我們會結(jié)合相關(guān)內(nèi)容,在接下來的幾篇文章中進(jìn)一步討論學(xué)習(xí)。不難發(fā)現(xiàn),許多違反了MISRA C++:2008中規(guī)則的例程都是符合C++語言標(biāo)準(zhǔn)的,但出于安全性考慮,應(yīng)當(dāng)被禁止或者謹(jǐn)慎使用。通覽之后,往往會發(fā)現(xiàn)自己平時從未注意的一些編程習(xí)慣,都已經(jīng)被嚴(yán)令禁止。它們有些是明顯有礙安全性的,有些則相對隱蔽。
然而MISRA的號召力是不容小覷的。以嵌入式實時操作系統(tǒng)μC/OS-II為例,其2.52版本雖然已經(jīng)于2000年通過了美國航空管理局(FAA)的安全認(rèn)證,但2003年μC/OS-II的作者就根據(jù)MISRA C:1998規(guī)范又對源碼作了相應(yīng)的修改,并發(fā)布了2.62的新版本,宣稱其源代碼99%符合MISRA C:1998的要求。
4 安全性問題
對于安全性,MISRA給出以下5種可能的安全問題來源:開發(fā)人員的錯誤、開發(fā)人員對于語言的誤解、編譯器沒有按照開發(fā)人員的預(yù)期工作、編譯器本身含有錯誤、運行錯誤。
這些錯誤的來源與實際使用的是何種計算機(jī)語言沒有關(guān)系,可以說比較全面地包含了嵌入式系統(tǒng)開發(fā)以及其他相關(guān)的軟件設(shè)計中可能導(dǎo)致安全問題的所有渠道。
作為C++這樣一門面向?qū)ο蟮母呒壵Z言(由于其與C的淵源,嚴(yán)格地說,C++是具有某些面向?qū)ο筇卣鞯倪^程語言),通過類、函數(shù)參數(shù)類型檢查、模版、異常處理以及派生、繼承、多態(tài)等手段,使得其在保有高效率的同時,實現(xiàn)了強(qiáng)大的功能,并帶來了自頂向下的模塊化程序設(shè)計理念。但編程靈活度的提高,也令其代碼復(fù)雜而易錯。與C語言相比,它所面對的安全問題將更為隱蔽,更加難以發(fā)現(xiàn)。但就對數(shù)據(jù)的封裝而言,C++遠(yuǎn)遠(yuǎn)優(yōu)于C,只要參照合理的規(guī)范指南,進(jìn)行項目的開發(fā),就可以通過充分發(fā)揮C++靈活的特點,應(yīng)用到更多更廣的工程領(lǐng)域。
5 行業(yè)展望
標(biāo)準(zhǔn)與規(guī)范從來沒有如眼下這般備受重視過。一個權(quán)威的標(biāo)準(zhǔn)或規(guī)范,不僅將成為相關(guān)領(lǐng)域的“金科玉律”,更是行業(yè)動向的風(fēng)向標(biāo)??梢哉f正是由于MISRA-C的存在,使得在高級語言種類繁多的今天,C語言的地位依然無可替代。
此次MISRA攜著在C語言上的巨大成功,選擇了C++語言進(jìn)行新的規(guī)范化嘗試,不僅因為C++語言的群眾基礎(chǔ)深厚,更是表明了嵌入式系統(tǒng)領(lǐng)域內(nèi)大多數(shù)專家的觀點:如果說未來能有一門語言取代目前C語言在嵌入式系統(tǒng)應(yīng)用中的地位的話,也只能是C++語言。一名成功的嵌入式系統(tǒng)工程師,必須是對行業(yè)動向極為敏感的,也只有這樣,才能在知識爆炸的今天緊跟時代潮流。從使用C語言到使用C++語言是一個巨大的跨越,決不僅僅像使用“增強(qiáng)的C”那么簡單,需要從現(xiàn)在就開始學(xué)習(xí)。而從學(xué)習(xí)之初就養(yǎng)成的良好的語言使用習(xí)慣,將決定將來進(jìn)階的速度與可能性。MISRA C++:2008無疑是培養(yǎng)這樣良好習(xí)慣的最佳手冊。
linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)
評論