999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

如何保持C語言程序的安全※

2014-06-25 02:46:18IARSystemsAndersHolmberg
關(guān)鍵詞:定義標(biāo)準(zhǔn)語言

IAR Systems Anders Holmberg

姜橋 胡文婷 譯

引 言

本文關(guān)注的是使用C語言對(duì)安全功能有高度要求的安全關(guān)鍵系統(tǒng)(Safety-Critical System)進(jìn)行開發(fā)的過程中涉及到的一些問題。盡管這種語言充滿不確定行為、依賴硬件以及其他陷阱,但它仍然是在安全關(guān)鍵開發(fā)領(lǐng)域使用的最為廣泛和流行的語言。而我們可以通過事先考慮和規(guī)劃,把這些潛在的問題變成了優(yōu)勢(shì)。

1 移動(dòng)你的腳步

早在1991年,《開發(fā)者的洞察力》雜志發(fā)表了一篇標(biāo)題為《如何搬起石頭砸自己的腳》的文章,其開頭說:“隨著現(xiàn)代編程語言的大量擴(kuò)散(彼此之間借鑒了大量類似的功能特點(diǎn)),有時(shí)您要弄清楚目前正在使用的是哪種編程語言都是很困難的。本指南所提供的內(nèi)容可視作一項(xiàng)公共服務(wù),以幫助程序員在困境中發(fā)現(xiàn)自我。”

由C開始的語言列表和其簡(jiǎn)單的狀態(tài):

◆C——搬起石頭砸了自己的腳

這個(gè)判斷可能顯得有點(diǎn)苛刻,但還是有些道理的。然而,即使替代編程語言可能沒有如類型安全和不確定的行為等方面的問題,但它們往往缺乏編程控制硬件功能。如果堅(jiān)持用C語言,我們就需要在其優(yōu)點(diǎn)以及明顯或不那么明顯的缺陷之間找一個(gè)平衡點(diǎn)。我們可以從兩個(gè)不同的角度觀察C語言在安全關(guān)鍵功能編程開發(fā)中的應(yīng)用:

◆在安全關(guān)鍵的項(xiàng)目中有哪些外部需求,怎樣選擇編程語言?

◆可以做些什么來彌補(bǔ)一些明顯的C語言的缺陷呢?特別是針對(duì)現(xiàn)有的代碼。

2 標(biāo)準(zhǔn)答案

如果您的產(chǎn)品涉及到如汽車、工業(yè)控制、醫(yī)療設(shè)備、鐵路等領(lǐng)域,這些產(chǎn)品一般來說都有正式的功能安全要求。這種要求可以歸結(jié)為一個(gè)非常具體的產(chǎn)品容錯(cuò)率要求,或產(chǎn)品中某些特定功能的允許故障發(fā)生的概率。它也可以是按照IEC61508(電氣和電子可編程器件)、ISO26262(汽車),或EN50126x(鐵路)等通用功能安全標(biāo)準(zhǔn)開發(fā)的產(chǎn)品。至少10年以來,一個(gè)明顯的趨勢(shì)是安全功能的實(shí)施正在離開純機(jī)械或PLC自動(dòng)化控制,從而進(jìn)入單片機(jī)的世界,因此這種要求也延伸到了軟件領(lǐng)域。

由于各種標(biāo)準(zhǔn)的軟件要求的意圖是類似的,我們使用IEC61508標(biāo)準(zhǔn)作為一個(gè)例子。該標(biāo)準(zhǔn)規(guī)定了許多特定行業(yè)標(biāo)準(zhǔn)的基礎(chǔ)要求,符合IEC61508標(biāo)準(zhǔn)的產(chǎn)品很大程度上也是符合ISO26262標(biāo)準(zhǔn)的。

這些標(biāo)準(zhǔn)將嚴(yán)重影響你的工作方式和工作文檔:從收集需求,到計(jì)劃你的產(chǎn)品如何在客戶現(xiàn)場(chǎng)部署和退役。你和你的項(xiàng)目利益相關(guān)方并不能單方面決定項(xiàng)目是否已經(jīng)成功達(dá)成所選標(biāo)準(zhǔn)的規(guī)定,還必須說服來自認(rèn)證機(jī)構(gòu)的第三方評(píng)估員,或者是在組織中扮演類似角色的人員,獲得他們的認(rèn)可。

這些標(biāo)準(zhǔn)大部分使用的是安全完整性等級(jí)概念的變種。所以根據(jù)產(chǎn)品的分類,在具體運(yùn)用合適的標(biāo)準(zhǔn)時(shí)將會(huì)有一些變化。

3 標(biāo)準(zhǔn)適用嗎?

先來說一個(gè)有趣的問題:這與我所選擇的編程語言有什么關(guān)系呢?關(guān)系可大了,接下來就開始說明這個(gè)問題。表1給出了如何根據(jù)應(yīng)用程序或者安全功能所需要達(dá)到的安全完整性水平來選擇一個(gè)合適的編程語言的相關(guān)建議。

表1 軟件設(shè)計(jì)和開發(fā)—支持工具與編程語言

HR是Highly Recommended的縮寫,這意味著對(duì)于標(biāo)有HR標(biāo)志的項(xiàng)目,應(yīng)當(dāng)盡量遵守該建議,如果不能遵守,也請(qǐng)給出一個(gè)100%合理的理由。

正如在表1中看到的,使用合適的編程語言是被強(qiáng)烈推薦的,但是究竟為何要被推薦,我們并沒有多大感覺,對(duì)嗎?不過,表中引用的C附錄給出了一個(gè)關(guān)于合適的編程語言的定義:語言的定義應(yīng)該是充分且明確的。語言應(yīng)該是面向用戶或問題的,而不是面向處理器/平臺(tái)的。與專用語言相比,應(yīng)當(dāng)優(yōu)先選擇廣泛使用的語言或它們的子集。語言應(yīng)鼓勵(lì)使用小且方便管理的軟件模塊;應(yīng)當(dāng)限制對(duì)在特定的軟件模塊中的數(shù)據(jù)、變量子范圍定義,以及任何其他類型錯(cuò)誤限制結(jié)構(gòu)的訪問。

讓我們看看C語言是否均能滿足上述各個(gè)部分的定義:

① 語言應(yīng)充分明確定義:這取決于你如何考慮,可以說C99包含至少190未定義行為。

② 語言應(yīng)該是面向用戶或問題的,而不是面向處理器/平臺(tái)的:最初創(chuàng)建C語言是為了成為PDP-11架構(gòu)的系統(tǒng)開發(fā)語言;一個(gè)特定目標(biāo)的C語言實(shí)現(xiàn)必然與另一個(gè)目標(biāo)的實(shí)現(xiàn)是不同的,有時(shí)對(duì)相同目標(biāo)的實(shí)現(xiàn)甚至都是不同的,我們真的很難認(rèn)為C符合這部分定義……

③ 與專用語言相比,應(yīng)當(dāng)優(yōu)先選擇廣泛使用的語言或它們的子集:終于,我們發(fā)現(xiàn)C語言是能夠滿足這條定義的!

④ 語言應(yīng)該鼓勵(lì)使用小且方便管理的軟件模塊,限制對(duì)在特定的軟件模塊中數(shù)據(jù)、變量子范圍定義,以及任何其他類型錯(cuò)誤限制結(jié)構(gòu)的訪問:雖然C沒有明確禁止創(chuàng)建符合這些條件的抽象概念,但是坦率地說,我們認(rèn)為正好相反,C語言本身絕對(duì)沒有對(duì)此類概念提供任何支持。

C語言并不完全符合這些標(biāo)準(zhǔn)的期望。然而,我們可以做些什么呢?其實(shí),答案很簡(jiǎn)單,至少我們?cè)谧x這些標(biāo)準(zhǔn)。如果繼續(xù)讀下去,會(huì)發(fā)現(xiàn)一個(gè)特定語言的判斷表,以下是C語言相關(guān)描述:

9 C R-NR NR 10 C及其子集和代碼編寫標(biāo)準(zhǔn),以及靜態(tài)分析工具的使用HR HR HR HR

盡管并沒有推薦使用C語言,但是,如果嚴(yán)格遵守代碼編寫標(biāo)準(zhǔn)并使用靜態(tài)分析工具,帶有一個(gè)適合子集的C語言是被強(qiáng)烈推薦的。但是,上文中提及的子集和代碼編寫標(biāo)準(zhǔn)怎么理解?

4 子標(biāo)準(zhǔn)

在此背景下,語言子集就是為了減少編程錯(cuò)誤的概率,增加找到已經(jīng)悄然潛伏在代碼庫中錯(cuò)誤的可能性。對(duì)于C語言,這意味著盡可能杜絕使用未定義的行為,實(shí)現(xiàn)定義明確的行為。有很多這樣的語言子集可供使用,其中最廣為人知的可能是 MISRA-C。MISRA-C規(guī)則集開始是英國汽車工業(yè)軟件可靠性協(xié)會(huì)的一項(xiàng)倡議,僅僅著眼于汽車軟件。多年來,MISRA-C規(guī)則已經(jīng)傳播到世界各地,并擴(kuò)展到其他細(xì)分行業(yè),其規(guī)則集是現(xiàn)在嵌入式行業(yè)使用最廣泛的C子集。

IEC61508中也涉及了很多代碼編寫標(biāo)準(zhǔn)的說明。下面是一些MISRA-C規(guī)則之外我們需要考慮的問題:

◆如何來保護(hù)共享資源,如全局變量的訪問。

◆使用為對(duì)象分配的棧和堆的內(nèi)存。

◆允許或不允許遞歸?

◆復(fù)雜性的限制,如限制函數(shù)的循環(huán)復(fù)雜度。

◆在某些不合適的情況下放棄遵循MISRA-C規(guī)則。

◆如何使用編譯器的特定功能,如本征函數(shù)或語言擴(kuò)展。

◆如何使用范圍檢查,斷言和前置/后置條件以及類似的結(jié)構(gòu)來捕獲錯(cuò)誤。

◆模塊之間的接口組織和訪問。

◆文檔要求。

從本質(zhì)上講,一種代碼編寫標(biāo)準(zhǔn)應(yīng)提供一些建議來指導(dǎo)如何處理影響到代碼質(zhì)量和完整性的問題,而不是由語言和其子集提供明確的建議。

5 總 結(jié)

總結(jié)出以下幾個(gè)重點(diǎn):

◆開始寫代碼之前,先熟悉相關(guān)標(biāo)準(zhǔn)定義的軟件開發(fā)要求;

◆使用MISRA-C作為代碼編寫標(biāo)準(zhǔn)基礎(chǔ);

◆檢查volatile關(guān)鍵字使用;

◆實(shí)施一個(gè)堆棧分配測(cè)試和分析策略。

本文為期刊縮略版,全文見本刊網(wǎng)站www.mesnet.com.cn。

猜你喜歡
定義標(biāo)準(zhǔn)語言
2022 年3 月實(shí)施的工程建設(shè)標(biāo)準(zhǔn)
語言是刀
文苑(2020年4期)2020-05-30 12:35:30
忠誠的標(biāo)準(zhǔn)
美還是丑?
讓語言描寫搖曳多姿
累積動(dòng)態(tài)分析下的同聲傳譯語言壓縮
一家之言:新標(biāo)準(zhǔn)將解決快遞業(yè)“成長(zhǎng)中的煩惱”
專用汽車(2016年4期)2016-03-01 04:13:43
成功的定義
山東青年(2016年1期)2016-02-28 14:25:25
我有我語言
修辭學(xué)的重大定義
主站蜘蛛池模板: 特级aaaaaaaaa毛片免费视频| 亚洲九九视频| 国产婬乱a一级毛片多女| 九九视频免费在线观看| 欧美成一级| 国产精品女熟高潮视频| 日韩毛片基地| 亚洲精品国产精品乱码不卞| 欧美区一区| 国产在线91在线电影| 精品无码专区亚洲| 一本大道无码日韩精品影视| 又大又硬又爽免费视频| 香蕉精品在线| 青草视频网站在线观看| 亚洲免费成人网| 国产亚洲一区二区三区在线| 伊人久久综在合线亚洲2019| 91视频99| 国产chinese男男gay视频网| 免费av一区二区三区在线| 欧美a在线视频| 亚洲成肉网| 99手机在线视频| 天天摸夜夜操| 免费国产无遮挡又黄又爽| 99热这里只有免费国产精品 | 大陆精大陆国产国语精品1024| 成人一区专区在线观看| 全午夜免费一级毛片| av大片在线无码免费| 国产在线拍偷自揄观看视频网站| 日韩大片免费观看视频播放| 99激情网| AV在线天堂进入| 在线国产毛片| 亚洲一本大道在线| 国产午夜小视频| 精品久久香蕉国产线看观看gif | 国产综合在线观看视频| 国产麻豆精品手机在线观看| 国产精品一区二区在线播放| 一区二区三区四区精品视频| 伊人激情综合| 国产在线观看第二页| 久久毛片网| 91无码人妻精品一区| 中文字幕不卡免费高清视频| 国产午夜人做人免费视频中文 | 尤物成AV人片在线观看| 伊在人亞洲香蕉精品區| 亚洲激情99| 99ri精品视频在线观看播放| 美女内射视频WWW网站午夜 | 欧美国产综合色视频| 日本欧美在线观看| 熟妇丰满人妻| 亚洲天堂在线免费| 五月综合色婷婷| 亚洲AⅤ波多系列中文字幕| 亚洲午夜福利精品无码| 国产一级毛片高清完整视频版| 四虎永久免费地址在线网站 | 日本高清有码人妻| 日本欧美中文字幕精品亚洲| 国产精品亚欧美一区二区| 丁香六月综合网| 伊人色综合久久天天| 2019国产在线| 99这里只有精品在线| 国产91无码福利在线| 午夜精品久久久久久久无码软件 | 自拍偷拍一区| 亚洲精品在线91| 依依成人精品无v国产| 丁香六月激情综合| 久久久久亚洲精品成人网| 美女潮喷出白浆在线观看视频| 国产成人禁片在线观看| 国产欧美高清| 91亚洲国产视频| 亚洲第一中文字幕|