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

當(dāng)前位置:首頁 > 工業(yè)控制 > 《機(jī)電信息》
[導(dǎo)讀]隨著嵌入式計算設(shè)備基礎(chǔ)硬件性能的提升,在通信、工業(yè)制造、交通運輸?shù)阮I(lǐng)域,嵌入式系統(tǒng)逐漸承擔(dān)起更加綜合化和關(guān)鍵的任務(wù),這也導(dǎo)致嵌入式軟件在結(jié)構(gòu)愈加復(fù)雜的同時,其安全性問題也越來越受到重視。堆棧是嵌入式軟件中的重要存儲結(jié)構(gòu),它用于保存軟件運行過程中的關(guān)鍵信息。堆棧的安全也直接影響到嵌入式軟件的安全,因此,在一些安全性要求較高的領(lǐng)域,堆棧的使用分析已成為保證軟件安全性的必要工作之一,如機(jī)載領(lǐng)域DO—178C中要求,在對軟件源代碼的準(zhǔn)確性和一致性評審和分析時需要包含對堆棧使用的分析。本文結(jié)合現(xiàn)有技術(shù),說明如何進(jìn)行嵌入式軟件堆棧使用分析[1]。

引言

隨著嵌入式計算設(shè)備基礎(chǔ)硬件性能的提升,在通信、工業(yè)制造、交通運輸?shù)阮I(lǐng)域,嵌入式系統(tǒng)逐漸承擔(dān)起更加綜合化和關(guān)鍵的任務(wù),這也導(dǎo)致嵌入式軟件在結(jié)構(gòu)愈加復(fù)雜的同時,其安全性問題也越來越受到重視。堆棧是嵌入式軟件中的重要存儲結(jié)構(gòu),它用于保存軟件運行過程中的關(guān)鍵信息。堆棧的安全也直接影響到嵌入式軟件的安全,因此,在一些安全性要求較高的領(lǐng)域,堆棧的使用分析已成為保證軟件安全性的必要工作之一,如機(jī)載領(lǐng)域DO—178C中要求,在對軟件源代碼的準(zhǔn)確性和一致性評審和分析時需要包含對堆棧使用的分析。本文結(jié)合現(xiàn)有技術(shù),說明如何進(jìn)行嵌入式軟件堆棧使用分析[1]。

1堆棧的概念

堆棧,又稱棧,是一種后進(jìn)先出的數(shù)據(jù)結(jié)構(gòu)。當(dāng)軟件中任務(wù)因函數(shù)調(diào)用、中斷或異常處理而發(fā)生跳轉(zhuǎn)時,會將任務(wù)現(xiàn)場的上下文信息、變量、參數(shù)等緩存到堆棧中,待處理完成后,返回時從堆棧中再恢復(fù)現(xiàn)場信息繼續(xù)處理[2]。

堆棧因使用場景不同,通常分為三種:任務(wù)棧、任務(wù)異常棧和中斷棧。

任務(wù)棧是軟件中任務(wù)在正常運行時使用到的棧。任務(wù)在運行時會持續(xù)進(jìn)行函數(shù)調(diào)用,每一次調(diào)用都意味著一次函數(shù)跳轉(zhuǎn)。任務(wù)棧用于在函數(shù)跳轉(zhuǎn)前緩存現(xiàn)場信息,在函數(shù)返回時從任務(wù)棧中恢復(fù)現(xiàn)場信息。

任務(wù)異常棧是系統(tǒng)處理任務(wù)引發(fā)異常時使用到的棧。任務(wù)在運行時可能會因為程序錯誤而引起系統(tǒng)異常,此時操作系統(tǒng)會進(jìn)入異常處理,該處理過程中使用任務(wù)異常棧保存異常發(fā)生現(xiàn)場信息和處理過程信息。

中斷棧是系統(tǒng)處理外部中斷時使用到的棧。任務(wù)在運行時可能會被外部中斷打斷,此時操作系統(tǒng)會進(jìn)入中斷處理,該處理過程中使用中斷棧保存中斷發(fā)生現(xiàn)場信息和處理過程信息。

嵌入式軟件的運行實際上是多個任務(wù)的持續(xù)調(diào)度和執(zhí)行,通常操作系統(tǒng)在創(chuàng)建每個任務(wù)時都會為其分配一個任務(wù)棧和一個任務(wù)異常棧。任務(wù)從其入口函數(shù)開始啟動執(zhí)行,執(zhí)行過程中發(fā)生函數(shù)調(diào)用時進(jìn)行數(shù)據(jù)壓棧,用任務(wù)棧存儲參數(shù)、變量、寄存器值等臨時數(shù)據(jù)。函數(shù)返回時進(jìn)行彈棧,從任務(wù)棧中恢復(fù)臨時數(shù)據(jù)。任務(wù)切換時會切換使用的任務(wù)棧,因此任務(wù)棧之間是相互隔離的。任務(wù)運行時可能因代碼缺陷等原因觸發(fā)系統(tǒng)異常,此時停止任務(wù)運行,將任務(wù)棧切換為任務(wù)異常棧進(jìn)行異常處理,處理完成后再切換回任務(wù)棧。任務(wù)運行時會被外部設(shè)備中斷打斷,如定時器中斷、串口中斷等,此時停止任務(wù)運行,將任務(wù)棧切換到中斷棧進(jìn)行中斷處理,處理完成后再切換回任務(wù)棧。

2嵌入式軟件堆棧使用分析目的

嵌入式軟件堆棧使用分析的目的是分析并計算軟件運行期間堆棧的最差使用情況,確認(rèn)堆棧資源分配是否合理'需確保在最差情況下也不會出現(xiàn)棧溢出,從而保證軟件運行過程中堆棧中的關(guān)鍵數(shù)據(jù)始終是正確的。

任務(wù)棧是軟件運行過程中被操作最頻繁的堆棧,且存儲著任務(wù)運行時的關(guān)鍵信息。任務(wù)棧中的信息若被破壞或篡改'將會導(dǎo)致程序運行不符合預(yù)期甚至程序崩潰。對于高安全性的嵌入式軟件'針對任務(wù)棧的堆棧使用分析是軟件安全性保證工作的重要部分。故本文只針對嵌入式軟件任務(wù)棧的堆棧使用分析方法進(jìn)行說明。

3嵌入式軟件堆棧使用分析技術(shù)

在進(jìn)行嵌入式軟件堆棧使用分析時可以采用多種技術(shù),以下針對三種常見的技術(shù)方法進(jìn)行說明。

1)手工計算法:人工計算任務(wù)執(zhí)行流程中各函數(shù)調(diào)用期間所需的任務(wù)棧空間大小,并估算出所有可能的調(diào)用路徑上所需的任務(wù)??臻g大小,其中值最大的即為任務(wù)棧的最壞使用情況。該方法需要分析人員熟悉程序源代碼和函數(shù)調(diào)用期間使用的寄存器數(shù)量和每個寄存器所占用的??臻g大小。對于較復(fù)雜的軟件,該方法工作量大、耗時長、易出錯,其計算結(jié)果準(zhǔn)確程度依賴于分析人員個人能力。

2)靜態(tài)代碼分析法:通過堆棧分析工具對代碼展開靜態(tài)分析,從而計算出任務(wù)棧的最壞使用情況及路徑。工具以任務(wù)入口函數(shù)為起點,計算出一條從起點到調(diào)用終點的任務(wù)棧最壞使用路徑,該路徑上各函數(shù)節(jié)點的堆棧使用之和便是任務(wù)棧的最壞使用情況。該方法僅前期準(zhǔn)備階段需要一定工作量,后續(xù)階段工作易實施、耗時短、結(jié)果直觀。但該方法無法分析動態(tài)調(diào)用場景,如通過指針調(diào)用,需要人工干預(yù)。

3)動態(tài)運行時分析法:通過動態(tài)分析工具監(jiān)控程序的運行時堆棧使用情況從而獲得最壞使用情況。該方法通常需先按照工具約定對代碼進(jìn)行插樁并重新編譯生成可執(zhí)行程序,之后通過執(zhí)行測試用例覆蓋所有可能的程序路徑,工具可以跟蹤用例執(zhí)行期間的函數(shù)調(diào)用和返回,記錄堆棧的使用情況,最終分析出堆棧最壞使用情況。該方法分析階段自動化,無須人工干預(yù)、工作量較小、可覆蓋動態(tài)調(diào)用場景。但該方法分析結(jié)果準(zhǔn)確程度依賴于測試用例設(shè)計完善程度,若測試用例未覆蓋到全部路徑,則可能會導(dǎo)致結(jié)果不準(zhǔn)確。

綜上所述,相較于其他兩種方法,靜態(tài)代碼分析法使用工具代替人工分析,效率更高,同時無須部署運行目標(biāo)軟件,更加方便靈活。因此本文基于靜態(tài)代碼分析法,介紹如何通過靜態(tài)分析工具stackAnalyer進(jìn)行嵌入式軟件堆棧使用分析。

4 stackAnaIyer概述

stackAnalyer是一款由Abslnt公司開發(fā)的用于嵌入式軟件堆棧使用情況分析的工具。它是一款靜態(tài)分析工具,不依賴程序執(zhí)行。它通過對二進(jìn)制可執(zhí)行文件展開靜態(tài)分析,自動分析從輸入的程序入口函數(shù)到結(jié)束的所有可能調(diào)用路徑,并計算路徑上的堆棧使用情況,識別堆棧最差使用情況和路徑。stackAnalyer工具的工作原理如下:

1)以任務(wù)入口函數(shù)為起點分析代碼,為任務(wù)建立一棵調(diào)用樹;

2)分析該調(diào)用樹中每個節(jié)點上函數(shù)的堆棧使用量;

3)分析并計算從樹根節(jié)點到葉子節(jié)點哪條調(diào)用路徑上經(jīng)過的節(jié)點函數(shù)的堆棧使用量之和最大,該條路徑便是任務(wù)堆棧最差使用路徑,使用量之和為任務(wù)堆棧最差使用情況。

stackAnalyer工具存在如下兩處功能缺陷:

1)作為靜態(tài)代碼分析工具無法分析包括函數(shù)指針調(diào)用在內(nèi)的動態(tài)調(diào)用場景,遇到通過函數(shù)指針的跳轉(zhuǎn)時,由于跳轉(zhuǎn)地址不是有效的函數(shù)地址,會導(dǎo)致分析失敗;

2)無法分析系統(tǒng)調(diào)用場景,遇到系統(tǒng)調(diào)用指令時由于無法識別跳轉(zhuǎn)目的函數(shù),會終止分析該條路徑。

針對上述兩種場景,在實際操作時需要進(jìn)行人工干預(yù)。

5嵌入式軟件堆棧使用分析方法

本章節(jié)結(jié)合stackAnalyer工具分析原理和嵌入式軟件特點,以圖1所示的Taskcase任務(wù)為例,針對基于靜態(tài)代碼分析的嵌入式軟件堆棧使用分析實施過程進(jìn)行說明。

5.1梳理軟件任務(wù)信息

在進(jìn)行堆棧使用分析時,只有明確待分析軟件中運行的任務(wù)的基本信息,才能針對具體任務(wù)展開分析和評估工作。因此首先需要梳理出軟件系統(tǒng)中運行任務(wù)的信息,該工作至關(guān)重要,是后續(xù)所有工作的基礎(chǔ),且只能由人工完成。梳理的任務(wù)需要覆蓋本次待分析軟件包含的所有任務(wù),且梳理的信息需準(zhǔn)確。梳理的任務(wù)信息至少需要包含如下屬性:

1)任務(wù)標(biāo)識:可唯一標(biāo)識一個任務(wù)的屬性,如任務(wù)名或任務(wù)ID。建議使用任務(wù)名作為任務(wù)標(biāo)識,因為通常任務(wù)ID在每次運行軟件時都可能不同,而任務(wù)名是不變的且易于理解。

2)任務(wù)入口函數(shù):創(chuàng)建任務(wù)時為其指定的入口函數(shù)。任務(wù)入口函數(shù)必須是軟件的可執(zhí)行文件中存在的、有效的函數(shù)符號,若存在同名的函數(shù),則需要說明定義該任務(wù)入口函數(shù)的文件名以便區(qū)分。若在創(chuàng)建任務(wù)時是通過函數(shù)指針方式指定的入口函數(shù),則需要確定指針具體指向的函數(shù)。只需要記錄函數(shù)名即可,無須關(guān)注其參數(shù)和返回值。

3)任務(wù)特權(quán)狀態(tài):指任務(wù)運行時所處的系統(tǒng)特權(quán)狀態(tài),如用戶態(tài)和系統(tǒng)態(tài),部分支持虛擬化的系統(tǒng)還存在超級用戶態(tài)等第三種狀態(tài),本文不考慮三態(tài)場景。該屬性說明了任務(wù)運行時任務(wù)棧所屬的特權(quán)空間。

4)分配的任務(wù)棧大小:任務(wù)創(chuàng)建時為其分配的任務(wù)棧大小,用于和分析結(jié)果進(jìn)行對比評估。

5)任務(wù)棧最差使用情況:記錄當(dāng)前任務(wù)的堆棧使用分析結(jié)果。

6)補(bǔ)充分析說明:若工具分析結(jié)果不準(zhǔn)確或分析失敗,則需要人工補(bǔ)充分析并說明具體的補(bǔ)充分析情況,否則無須說明。

在實際工作中可以按列表的形式梳理和記錄上述任務(wù)信息。以圖1中用戶Taskcase任務(wù)為例梳理任務(wù)信息表,如表1所示。

5.2工具分析

梳理完成任務(wù)信息表后,使用stackAnalyer工具對表中任務(wù)記錄逐條進(jìn)行靜態(tài)代碼分析。工具根據(jù)輸入的任務(wù)入口函數(shù)自動分析并生成分析報告,若分析成功,則會在報告中顯示任務(wù)棧最大使用大小和路徑。以Taskcase任務(wù)為例,分析結(jié)果報告如圖2所示。

5.3補(bǔ)充分析

如上文所述,StackAnalyer工具在遇到函數(shù)指針調(diào)用和系統(tǒng)調(diào)用時會分析失敗,導(dǎo)致無法產(chǎn)生準(zhǔn)確的結(jié)果,因此需要在工具分析后針對分析失敗的任務(wù)進(jìn)行補(bǔ)充分析。

對于函數(shù)指針調(diào)用場景,需要走讀代碼確認(rèn)程序運行時實際調(diào)用的函數(shù),使用工具提供的AIS工程腳本,將該函數(shù)補(bǔ)充到任務(wù)的函數(shù)調(diào)用樹上,重新分析生成最終結(jié)果。若存在多個可能調(diào)用的函數(shù),則需要對每一個函數(shù)都進(jìn)行補(bǔ)充分析,其中結(jié)果值最大的即為該任務(wù)最終分析結(jié)果。

對于系統(tǒng)調(diào)用場景,需要根據(jù)具體實現(xiàn)場景分析。系統(tǒng)調(diào)用是一種軟中斷,通常作為用戶態(tài)程序進(jìn)入系統(tǒng)態(tài)的接口。嵌入式操作系統(tǒng)提供兩種通過觸發(fā)系統(tǒng)調(diào)用實現(xiàn)函數(shù)調(diào)用的機(jī)制:

1)進(jìn)入系統(tǒng)態(tài)的系統(tǒng)調(diào)用。該機(jī)制是一種跨特權(quán)狀態(tài)的調(diào)用,會切換任務(wù)棧為系統(tǒng)態(tài)堆棧,后續(xù)堆棧的使用不會再影響任務(wù)棧,因此無須計算后續(xù)調(diào)用函數(shù)的堆棧使用量,將其直接指定為0后重新分析最終結(jié)果。

2)共享庫calllib調(diào)用。該機(jī)制通過觸發(fā)系統(tǒng)調(diào)用查找內(nèi)存空間中共享庫函數(shù)地址從而實現(xiàn)跨層級的函數(shù)調(diào)用。該調(diào)用只能在同一特權(quán)狀態(tài)下進(jìn)行,不會切換任務(wù)棧,后續(xù)堆棧使用會影響當(dāng)前任務(wù)棧,因此需要人工對后續(xù)調(diào)用過程進(jìn)行堆棧使用分析,將結(jié)果補(bǔ)充到最終分析結(jié)果中。

5.4結(jié)果分析

將軟件中所有任務(wù)都分析和補(bǔ)充分析完成后,需要逐條對軟件任務(wù)信息表中“分配的任務(wù)棧大小”和“任務(wù)棧最差使用情況”屬性進(jìn)行比較。若前者不小于后者,則說明該任務(wù)的任務(wù)棧空間分配充足,不存在棧溢出風(fēng)險,同時可根據(jù)具體差值適當(dāng)調(diào)整任務(wù)棧大小,節(jié)省系統(tǒng)資源;若前者小于后者,則說明存在棧溢出風(fēng)險,需要擴(kuò)充該任務(wù)的任務(wù)??臻g。

6結(jié)束語

本文提供了一種基于靜態(tài)代碼分析的嵌入式軟件堆棧使用分析方法,主要說明如何分析軟件任務(wù)棧的最差使用情況,同時對指針調(diào)用和系統(tǒng)調(diào)用兩種特殊調(diào)用場景提供了補(bǔ)充分析方法。對于異常棧和中斷棧,其使用場景特殊,無法使用靜態(tài)分析工具自動分析,因此還需進(jìn)一步研究對其分析的問題和難點。

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

LED驅(qū)動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: 驅(qū)動電源

在工業(yè)自動化蓬勃發(fā)展的當(dāng)下,工業(yè)電機(jī)作為核心動力設(shè)備,其驅(qū)動電源的性能直接關(guān)系到整個系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動勢抑制與過流保護(hù)是驅(qū)動電源設(shè)計中至關(guān)重要的兩個環(huán)節(jié),集成化方案的設(shè)計成為提升電機(jī)驅(qū)動性能的關(guān)鍵。

關(guān)鍵字: 工業(yè)電機(jī) 驅(qū)動電源

LED 驅(qū)動電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個照明設(shè)備的使用壽命。然而,在實際應(yīng)用中,LED 驅(qū)動電源易損壞的問題卻十分常見,不僅增加了維護(hù)成本,還影響了用戶體驗。要解決這一問題,需從設(shè)計、生...

關(guān)鍵字: 驅(qū)動電源 照明系統(tǒng) 散熱

根據(jù)LED驅(qū)動電源的公式,電感內(nèi)電流波動大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關(guān)鍵字: LED 設(shè)計 驅(qū)動電源

電動汽車(EV)作為新能源汽車的重要代表,正逐漸成為全球汽車產(chǎn)業(yè)的重要發(fā)展方向。電動汽車的核心技術(shù)之一是電機(jī)驅(qū)動控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機(jī)驅(qū)動系統(tǒng)中的關(guān)鍵元件,其性能直接影響到電動汽車的動力性能和...

關(guān)鍵字: 電動汽車 新能源 驅(qū)動電源

在現(xiàn)代城市建設(shè)中,街道及停車場照明作為基礎(chǔ)設(shè)施的重要組成部分,其質(zhì)量和效率直接關(guān)系到城市的公共安全、居民生活質(zhì)量和能源利用效率。隨著科技的進(jìn)步,高亮度白光發(fā)光二極管(LED)因其獨特的優(yōu)勢逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...

關(guān)鍵字: 發(fā)光二極管 驅(qū)動電源 LED

LED通用照明設(shè)計工程師會遇到許多挑戰(zhàn),如功率密度、功率因數(shù)校正(PFC)、空間受限和可靠性等。

關(guān)鍵字: LED 驅(qū)動電源 功率因數(shù)校正

在LED照明技術(shù)日益普及的今天,LED驅(qū)動電源的電磁干擾(EMI)問題成為了一個不可忽視的挑戰(zhàn)。電磁干擾不僅會影響LED燈具的正常工作,還可能對周圍電子設(shè)備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來解決L...

關(guān)鍵字: LED照明技術(shù) 電磁干擾 驅(qū)動電源

開關(guān)電源具有效率高的特性,而且開關(guān)電源的變壓器體積比串聯(lián)穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機(jī)重量也有所下降,所以,現(xiàn)在的LED驅(qū)動電源

關(guān)鍵字: LED 驅(qū)動電源 開關(guān)電源

LED驅(qū)動電源是把電源供應(yīng)轉(zhuǎn)換為特定的電壓電流以驅(qū)動LED發(fā)光的電壓轉(zhuǎn)換器,通常情況下:LED驅(qū)動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: LED 隧道燈 驅(qū)動電源
關(guān)閉