C++在嵌入式應(yīng)用中的安全問(wèn)題
規(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的新版本,宣稱(chēng)其源代碼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++這樣一門(mén)面向?qū)ο蟮母呒?jí)語(yǔ)言(由于其與C的淵源,嚴(yán)格地說(shuō),C++是具有某些面向?qū)ο筇卣鞯倪^(guò)程語(yǔ)言),通過(guò)類(lèi)、函數(shù)參數(shù)類(lèi)型檢查、模版、異常處理以及派生、繼承、多態(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)。可以說(shuō)正是由于MISRA-C的存在,使得在高級(jí)語(yǔ)言種類(lèi)繁多的今天,C語(yǔ)言的地位依然無(wú)可替代。
此次MISRA攜著在C語(yǔ)言上的巨大成功,選擇了C++語(yǔ)言進(jìn)行新的規(guī)范化嘗試,不僅因?yàn)镃++語(yǔ)言的群眾基礎(chǔ)深厚,更是表明了嵌入式系統(tǒng)領(lǐng)域內(nèi)大多數(shù)專(zhuān)家的觀點(diǎn):如果說(shuō)未來(lái)能有一門(mén)語(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è)。
linux操作系統(tǒng)文章專(zhuān)題:linux操作系統(tǒng)詳解(linux不再難懂)
評(píng)論