91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

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

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

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

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

li5236 ? 來(lái)源:IAR Systems ? 作者:IAR Systems ? 2022-03-29 14:50 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

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

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

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

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

image.png

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

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

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

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

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

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

總結(jié)

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

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

    關(guān)注

    147

    文章

    18925

    瀏覽量

    398323
  • 嵌入式開(kāi)發(fā)

    關(guān)注

    18

    文章

    1146

    瀏覽量

    50129
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    MIKROE與瑞薩簽署多年MCU嵌入式開(kāi)發(fā)工具支持協(xié)議

    2026年1月28日: 作為一家通過(guò)提供基于成熟標(biāo)準(zhǔn)的創(chuàng)新式硬件、軟件產(chǎn)品來(lái)大幅縮短開(kāi)發(fā)時(shí)間的嵌入式解決方案公司,MIKROE與總部位于東京的全球半導(dǎo)體解決方案提供商瑞薩電子簽署了一項(xiàng)為期多年
    發(fā)表于 01-28 12:04 ?274次閱讀
    MIKROE與瑞薩簽署多年MCU<b class='flag-5'>嵌入式開(kāi)發(fā)工具</b>支持協(xié)議

    嵌入式開(kāi)發(fā)常用函數(shù)速查表

    嵌入式開(kāi)發(fā),掌握常用函數(shù)的用法可以大大提高開(kāi)發(fā)效率。無(wú)論是單片機(jī)初學(xué)者還是有一定經(jīng)驗(yàn)的工程師,熟悉函數(shù)庫(kù)和調(diào)用方式都是必備技能。今天,我們?yōu)榇蠹艺硪环?b class='flag-5'>嵌入式開(kāi)發(fā)常用函數(shù)速查表,覆
    的頭像 發(fā)表于 01-19 09:06 ?308次閱讀
    <b class='flag-5'>嵌入式開(kāi)發(fā)</b>常用函數(shù)速查表

    嵌入式開(kāi)發(fā)在AI時(shí)代的發(fā)展變革展望

    嵌入式系統(tǒng)在現(xiàn)代科技應(yīng)用廣泛,隨著工業(yè)場(chǎng)景的智能化應(yīng)用需求不斷增長(zhǎng),其復(fù)雜性隨之增加,傳統(tǒng)開(kāi)發(fā)面臨諸多挑戰(zhàn)。IDE作為核心開(kāi)發(fā)工具,需適應(yīng)
    的頭像 發(fā)表于 01-14 12:15 ?525次閱讀
    <b class='flag-5'>嵌入式開(kāi)發(fā)</b>在AI時(shí)代的發(fā)展變革展望

    什么是嵌入式應(yīng)用開(kāi)發(fā)

    。 · ?醫(yī)療設(shè)備?:如心電圖儀、血壓計(jì)等。 開(kāi)發(fā)工具和技術(shù) 嵌入式開(kāi)發(fā)過(guò)程中常用的工具包括: · ?集成開(kāi)發(fā)環(huán)境(IDE)?:用于編寫、編譯和調(diào)試代碼。 · ?編譯器?:將高級(jí)
    發(fā)表于 01-12 16:13

    恩智浦嵌入式HMI應(yīng)用開(kāi)發(fā)工具GUI Guider 1.10.1全新上線

    恩智浦嵌入式HMI應(yīng)用開(kāi)發(fā)工具GUI Guider 1.10.1全新上線啦!新版本重點(diǎn)聚焦性能提升、工具鏈升級(jí)、多點(diǎn)觸控體驗(yàn)以及開(kāi)發(fā)板適配,進(jìn)一步優(yōu)化IDE界面,增強(qiáng)
    的頭像 發(fā)表于 12-28 09:45 ?1608次閱讀

    C語(yǔ)言單元測(cè)試在嵌入式軟件開(kāi)發(fā)的作用及專業(yè)工具的應(yīng)用

    三、winAMS工具的核心功能與優(yōu)勢(shì) winAMS是一款專業(yè)的嵌入式C語(yǔ)言單元測(cè)試工具,針對(duì)嵌入式開(kāi)發(fā)的特殊需求提供了全面解決方案。其主要
    發(fā)表于 12-18 11:46

    分享一個(gè)嵌入式開(kāi)發(fā)學(xué)習(xí)路線

    法,這些語(yǔ)法在嵌入式開(kāi)發(fā)至關(guān)重要。 2. 技能進(jìn)階期(2-3個(gè)月) 從51單片機(jī)過(guò)渡到主流的ARM Cortex-M系列(嵌入式就業(yè)核心平臺(tái)),學(xué)會(huì)使用STM32單片機(jī),掌握嵌入式開(kāi)發(fā)
    發(fā)表于 12-04 11:01

    嵌入式開(kāi)發(fā)工具版本的選擇策略

    今天,我們就來(lái)結(jié)合嵌入式常見(jiàn)的幾個(gè)軟件(如Keil / IAR、VS Code 、Source Insight、VMware、Git等),簡(jiǎn)單講一講嵌入式開(kāi)發(fā)工具軟件版本選擇策略。 開(kāi)發(fā)團(tuán)隊(duì)軟件
    發(fā)表于 11-25 06:11

    嵌入式開(kāi)發(fā)的關(guān)鍵點(diǎn)介紹

    嵌入式開(kāi)發(fā)現(xiàn)代科技扮演著非常重要的角色。隨著物聯(lián)網(wǎng)的發(fā)展,嵌入式系統(tǒng)的需求也越來(lái)越大。嵌入式開(kāi)發(fā)不僅需要
    發(fā)表于 11-13 08:12

    嵌入式開(kāi)發(fā)工具的現(xiàn)狀和發(fā)展簡(jiǎn)史

    集成開(kāi)發(fā)環(huán)境(IDE)正在經(jīng)歷深刻變革。傳統(tǒng)意義上披著“圖形界面”外衣的編譯器,已不再能滿足當(dāng)今的需求。隨著嵌入式系統(tǒng)變得越來(lái)越強(qiáng)大,而且AI開(kāi)始融入幾乎所有設(shè)計(jì),開(kāi)發(fā)者需要的是能夠
    的頭像 發(fā)表于 11-11 09:49 ?1207次閱讀

    恩智浦如何攻克兩大嵌入式開(kāi)發(fā)難題

    在我們的身邊,嵌入式系統(tǒng)無(wú)處不在。而隨著技術(shù)的進(jìn)步和應(yīng)用的拓展,今天的嵌入式開(kāi)發(fā)也面臨著諸多新課題、新挑戰(zhàn)。
    的頭像 發(fā)表于 10-27 09:28 ?1785次閱讀

    新一代嵌入式開(kāi)發(fā)平臺(tái) AMD嵌入式軟件和工具2025.1版現(xiàn)已推出

    AMD 2025.1 版嵌入式軟件和工具是面向新一代嵌入式系統(tǒng)開(kāi)發(fā)而打造的綜合平臺(tái),全面加速概念構(gòu)想到部署落地。 2025.1 版嵌入式軟件
    的頭像 發(fā)表于 08-20 09:15 ?3986次閱讀

    嵌入式開(kāi)發(fā)就業(yè)還有前景嗎?

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

    嵌入式開(kāi)發(fā)入門指南:從零開(kāi)始學(xué)習(xí)嵌入式

    隨著物聯(lián)網(wǎng)、智能硬件的發(fā)展,嵌入式開(kāi)發(fā)成為熱門技能之一。以下將為初學(xué)者提供一份詳細(xì)的嵌入式開(kāi)發(fā)入門指南,涵蓋學(xué)習(xí)路徑、必備工具、推薦資源等內(nèi)容。 1. 嵌入式系統(tǒng)的定義與應(yīng)用
    發(fā)表于 05-15 09:29

    嵌入式開(kāi)發(fā):高門檻的系統(tǒng)性工程與 996 的行業(yè)困局

    嵌入式開(kāi)發(fā)的門檻,往往被培訓(xùn)機(jī)構(gòu)和表象所掩蓋。許多人誤以為 “用 C 語(yǔ)言寫個(gè)跑在 ARM 上的程序” 就是嵌入式,實(shí)則連皮毛都未觸及。真正的嵌入式開(kāi)發(fā)是硬件與軟件深度融合的系統(tǒng)性工程,需跨越三重壁壘
    的頭像 發(fā)表于 04-09 11:06 ?994次閱讀
    <b class='flag-5'>嵌入式開(kāi)發(fā)</b>:高門檻的系統(tǒng)性工程與 996 的行業(yè)困局