0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何利用現(xiàn)代嵌入式開發(fā)工具中的堆棧保護(hù)功能

li5236 ? 來源:IAR Systems ? 作者:IAR Systems ? 2022-03-29 14:50 ? 次閱讀

在開發(fā)以MCU為核心的嵌入式系統(tǒng)時,當(dāng)軟件程序向預(yù)設(shè)的數(shù)據(jù)結(jié)構(gòu)(通常是一個固定長度的緩沖區(qū))之外的程序調(diào)用堆棧的內(nèi)存地址范圍寫入數(shù)據(jù)時,就會發(fā)生堆棧緩沖區(qū)溢出。這幾乎必然會損壞附近的數(shù)據(jù),甚至?xí)淖兎祷睾瘮?shù)。如果是有意為之,則這就是我們熟知的堆棧粉碎。防范堆棧緩沖區(qū)溢出的一種方法是使用堆棧canary,因其類似于在煤礦中使用金絲雀偵測毒氣而得名。目前,在以IAR Embedded Workbench為代表的領(lǐng)先開發(fā)工具的所有最新版本中,均已支持堆棧保護(hù)功能。

堆棧保護(hù)功能已經(jīng)成為最新嵌入式開發(fā)工具中必要的功能,但要在諸如IAR Embedded Workbench for Arm這樣的行業(yè)標(biāo)桿工具中實(shí)現(xiàn)堆棧保護(hù),就要使用一種啟發(fā)式算法來確認(rèn)一個函數(shù)是否需要堆棧保護(hù)。如果任何函數(shù)內(nèi)定義的局部變量為數(shù)組類型或包含數(shù)組類型成員的結(jié)構(gòu)類型,則該函數(shù)就需要堆棧保護(hù)。此外,如果任何局部變量的地址被傳播到函數(shù)之外,則該函數(shù)也需要堆棧保護(hù)。

如果一個函數(shù)需要堆棧保護(hù),那么該函數(shù)的局部變量將被按序排放,將數(shù)組類型的變量在函數(shù)堆棧中被放置在盡可能高的地址。在這些變量之后,會放置一個canary元素。在函數(shù)入口處,canary被初始化。初始化值取自全局變量 __stack_chk_guard。在函數(shù)退出時,代碼會驗(yàn)證canary元素是否仍然包含初始化值。如果該數(shù)值被改變,函數(shù) __stack_chk_fail就會被調(diào)用。

以被廣泛使用的IAR Embedded Workbench for Arm嵌入式開發(fā)工具為例,使用Project》Options》C/C++ Compiler》Code》Stack protection選項(xiàng),即可針對被認(rèn)定為需要保護(hù)的函數(shù)啟用堆棧保護(hù)。

image.png

或者,您也可以使用Project》Options》C/C++ Compiler》Extra Options頁面,指定 --stack_protection命令行來啟用堆棧保護(hù)功能。

在實(shí)際應(yīng)用實(shí)現(xiàn)堆棧保護(hù)

要使用堆棧保護(hù),開發(fā)人員必須在應(yīng)用中定義以下對象:

· extern uint32_t __stack_chk_guard全局變量 __stack_chk_guard在第一次使用前必須被初始化。如果初始化值是隨機(jī)的,則安全性會更高。

· __interwork __nounwind __noreturn void __stack_chk_fail(void)__stack_chk_fail函數(shù)的作用是通知發(fā)生了錯誤,然后終止應(yīng)用。請注意,這個函數(shù)的返回地址將指向失效函數(shù)。

arm\src\lib\runtime目錄下的文件stack_protection.c提供了 __stack_chk_guard和 __stack_chk_fail函數(shù)的參考模板。

總結(jié)

由于今天全球半導(dǎo)體供應(yīng)鏈緊張狀況尚未得到緩解,因此許多MCU等嵌入式應(yīng)用需要利用開發(fā)工具來保持核心技術(shù)和器件供應(yīng)上的靈活性,并最大限度地在不同硬件平臺上重用已完成的軟件。在這種情況下,無論是MCU芯片開發(fā)商還是嵌入式系統(tǒng)工程師,都需要利用那些已被業(yè)界最廣泛使用的開發(fā)工具,如IAR Embedded Workbench for Arm。由于這些工具也是其開發(fā)商和行業(yè)領(lǐng)先的MCU供應(yīng)商多年合作的成果,可以針對不同的硬件資源體系和應(yīng)用環(huán)境給出相應(yīng)的幫助,如IAR Embedded Workbench中的堆棧保護(hù)功能,因此可以以更短的研發(fā)周期,來實(shí)現(xiàn)嵌入式開發(fā)人員的研發(fā)目標(biāo)。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • mcu
    mcu
    +關(guān)注

    關(guān)注

    146

    文章

    16665

    瀏覽量

    347742
  • 嵌入式開發(fā)
    +關(guān)注

    關(guān)注

    18

    文章

    1006

    瀏覽量

    47352
收藏 人收藏

    評論

    相關(guān)推薦

    聚焦嵌入式開發(fā)的合規(guī)性工具、項(xiàng)目管理工具、版本迭代工具應(yīng)用

    ,就嵌入式開發(fā)與管理領(lǐng)域的最新趨勢、工具選擇以及DevSecOps實(shí)踐應(yīng)用等方面展開了深入探討。 本期對話龍智資深DevSecOps顧問徐晨暉, 分享嵌入式開發(fā)的合規(guī)性
    的頭像 發(fā)表于 07-29 15:15 ?231次閱讀

    嵌入式開發(fā)前景怎么樣?

    嵌入式開發(fā)前景非常廣闊,這主要得益于物聯(lián)網(wǎng)、人工智能、大數(shù)據(jù)等技術(shù)的快速發(fā)展,以及嵌入式系統(tǒng)在各個領(lǐng)域的廣泛應(yīng)用。以下是對嵌入式開發(fā)前景的詳細(xì)分析
    的頭像 發(fā)表于 07-10 09:00 ?1521次閱讀
    <b class='flag-5'>嵌入式開發(fā)</b>前景怎么樣?

    嵌入式開發(fā)就業(yè)前景怎么樣?

    嵌入式開發(fā)就業(yè)前景怎么樣?隨著科技的飛速發(fā)展,嵌入式開發(fā)在各個領(lǐng)域的應(yīng)用越來越廣泛,因此嵌入式開發(fā)的就業(yè)前景也備受關(guān)注。今天將從智能家居、醫(yī)療設(shè)備、工業(yè)控制、汽車電子、航空航天等方面,探討嵌入
    發(fā)表于 06-07 14:51

    fpga是嵌入式開發(fā)

    FPGA(現(xiàn)場可編程門陣列)與嵌入式開發(fā)之間確實(shí)存在一定的關(guān)聯(lián),但它們在本質(zhì)上是兩個不同的領(lǐng)域。
    的頭像 發(fā)表于 03-15 14:18 ?744次閱讀

    嵌入式開發(fā)為什么需要輸出調(diào)試信息?

    嵌入式開發(fā)為什么需要輸出調(diào)試信息? 因?yàn)檩敵稣{(diào)試信息是嵌入式開發(fā)中一項(xiàng)非常重要的實(shí)踐,它有助于保證軟件的可靠性、穩(wěn)定性和性能,也是故障排查的關(guān)鍵工具之一。 嵌入式開發(fā)輸出調(diào)試信息主要
    發(fā)表于 11-28 16:46

    嵌入式開發(fā)測試秘訣

    嵌入式軟件開發(fā)過程中,花在測試和花在編碼的時間比通常在3:1左右(實(shí)際上可能更多)。這個比例會隨著工程師編程、測試水平的提高而不斷下降,但無論如何,軟件測試都是嵌入式軟件開發(fā)
    的頭像 發(fā)表于 11-24 16:18 ?403次閱讀

    c語言嵌入式開發(fā)

    電子發(fā)燒友網(wǎng)站提供《c語言嵌入式開發(fā).zip》資料免費(fèi)下載
    發(fā)表于 11-17 14:11 ?2次下載
    c語言<b class='flag-5'>嵌入式開發(fā)</b>

    嵌入式開發(fā)系統(tǒng)基礎(chǔ)知識

    電子發(fā)燒友網(wǎng)站提供《嵌入式開發(fā)系統(tǒng)基礎(chǔ)知識.pdf》資料免費(fèi)下載
    發(fā)表于 11-17 10:59 ?1次下載
    <b class='flag-5'>嵌入式開發(fā)</b>系統(tǒng)基礎(chǔ)知識

    嵌入式開發(fā)學(xué)習(xí)路線

    電子發(fā)燒友網(wǎng)站提供《嵌入式開發(fā)學(xué)習(xí)路線.doc》資料免費(fèi)下載
    發(fā)表于 11-17 10:13 ?13次下載
    <b class='flag-5'>嵌入式開發(fā)</b>學(xué)習(xí)路線

    嵌入式開發(fā)學(xué)習(xí)路線分享

    現(xiàn)代生活,嵌入式技術(shù)已經(jīng)廣泛應(yīng)用于各個領(lǐng)域,比如以手機(jī)、智能手表、電子書等移動手持設(shè)備為代表的消費(fèi)類電子行業(yè);汽車電子行業(yè)的GPS定位導(dǎo)航;智慧醫(yī)療行業(yè)的外科手術(shù)機(jī)器人等這些都屬于嵌入式
    的頭像 發(fā)表于 11-15 11:51 ?1114次閱讀
    <b class='flag-5'>嵌入式開發(fā)</b>學(xué)習(xí)路線分享

    windows ce嵌入式開發(fā)入門-基本Xscale架構(gòu)

    電子發(fā)燒友網(wǎng)站提供《windows ce嵌入式開發(fā)入門-基本Xscale架構(gòu).pdf》資料免費(fèi)下載
    發(fā)表于 11-10 11:18 ?0次下載
    windows ce<b class='flag-5'>嵌入式開發(fā)</b>入門-基本Xscale架構(gòu)

    嵌入式軟件開發(fā)常用工具有哪些?

    的Visual Studio是一個非常流行的開發(fā)工具,提供了強(qiáng)大的IDE,支持C/C++等語言的開發(fā),并且可以配合各種插件進(jìn)行嵌入式開發(fā)。 5、Eclipse:Eclipse是一個開源的、基于插件的
    發(fā)表于 11-10 11:03

    嵌入式開發(fā)入門學(xué)習(xí)

    電子發(fā)燒友網(wǎng)站提供《嵌入式開發(fā)入門學(xué)習(xí).doc》資料免費(fèi)下載
    發(fā)表于 10-26 09:37 ?1次下載
    <b class='flag-5'>嵌入式開發(fā)</b>入門學(xué)習(xí)

    嵌入式開發(fā)的關(guān)鍵技術(shù)是什么_應(yīng)該考慮哪些因素

    嵌入式開發(fā)是指利用分立元件或集成器件進(jìn)行電路設(shè)計(jì)、結(jié)構(gòu)設(shè)計(jì),再進(jìn)行軟件編程(通常是高級語言),實(shí)驗(yàn),經(jīng)過多輪修改設(shè)計(jì)、制作,最終完成整個系統(tǒng)的開發(fā)。這種嵌入式開發(fā),適用于未來產(chǎn)品比較單
    的頭像 發(fā)表于 10-15 14:50 ?1051次閱讀

    Linux系統(tǒng)的嵌入式開發(fā)是什么

    嵌入式開發(fā)聽起來很高大上,但其實(shí)它就在我們身邊。   嵌入式開發(fā)是指將操作系統(tǒng)、應(yīng)用程序或數(shù)據(jù)存儲在嵌入式設(shè)備,如手機(jī)、平板電腦、智能家居等。   隨著物聯(lián)網(wǎng)時代的到來,
    的頭像 發(fā)表于 10-12 15:40 ?1517次閱讀