chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線(xiàn)課程
  • 觀(guān)看技術(shù)視頻
  • 寫(xiě)文章/發(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)存地址范圍寫(xiě)入數(shù)據(jù)時(shí),就會(huì)發(fā)生堆棧緩沖區(qū)溢出。這幾乎必然會(huì)損壞附近的數(shù)據(jù),甚至?xí)淖兎祷睾瘮?shù)。如果是有意為之,則這就是我們熟知的堆棧粉碎。防范堆棧緩沖區(qū)溢出的一種方法是使用堆棧canary,因其類(lèi)似于在煤礦中使用金絲雀?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ù)組類(lèi)型或包含數(shù)組類(lèi)型成員的結(jié)構(gòu)類(lèi)型,則該函數(shù)就需要堆棧保護(hù)。此外,如果任何局部變量的地址被傳播到函數(shù)之外,則該函數(shù)也需要堆棧保護(hù)。

如果一個(gè)函數(shù)需要堆棧保護(hù),那么該函數(shù)的局部變量將被按序排放,將數(shù)組類(lèi)型的變量在函數(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)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀(guā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

    文章

    18613

    瀏覽量

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

    關(guān)注

    18

    文章

    1103

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

    一個(gè)面向單片機(jī)、事件驅(qū)動(dòng)的嵌入式開(kāi)發(fā)平臺(tái)介紹

    為核心,打造一個(gè)統(tǒng)一的嵌入式技術(shù)生態(tài),為廣大企業(yè)用戶(hù)和嵌入式開(kāi)發(fā)者們,提供搞可靠性的、高性能的、現(xiàn)代且高開(kāi)發(fā)效率的嵌入式開(kāi)發(fā)環(huán)境。 Eve
    發(fā)表于 12-05 06:26

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

    法,這些語(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)意義上披著“圖形界面”外衣的編譯器,已不再能滿(mǎn)足當(dāng)今的需求。隨著嵌入式系統(tǒng)變得越來(lái)越強(qiáng)大,而且AI開(kāi)始融入幾乎所有設(shè)計(jì),開(kāi)發(fā)者需要的是能夠
    的頭像 發(fā)表于 11-11 09:49 ?730次閱讀

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

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

    新一代嵌入式開(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 ?3633次閱讀

    嵌入式開(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è)控制、汽車(chē)電子、航空航天等方面,探討嵌入式
    發(fā)表于 07-16 10:47

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

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

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

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

    如何成為嵌入式開(kāi)發(fā)工程師?

    如何成為嵌入式開(kāi)發(fā)工程師? 成為嵌入式開(kāi)發(fā)工程師通常需要掌握一系列技能和知識(shí),并且在實(shí)踐不斷積累經(jīng)驗(yàn)。以下是一些基本步驟和建議: 1. 基礎(chǔ)教育:- 獲取電子工程、計(jì)算機(jī)科學(xué)或相關(guān)領(lǐng)域的學(xué)位
    發(fā)表于 02-19 10:39

    盤(pán)點(diǎn)工程師常用的嵌入式開(kāi)發(fā)工具

    嵌入式開(kāi)發(fā)涉及硬件與軟件的緊密結(jié)合,開(kāi)發(fā)工具的選擇對(duì)效率和質(zhì)量至關(guān)重要。以下是嵌入式開(kāi)發(fā)中常用的工具分類(lèi)及代表性工具,涵蓋
    的頭像 發(fā)表于 02-07 10:06 ?3749次閱讀

    如何提高嵌入式代碼質(zhì)量?

    技術(shù) 現(xiàn)代嵌入式開(kāi)發(fā)工具和測(cè)試技術(shù)可以極大地提升代碼質(zhì)量和開(kāi)發(fā)效率: 1. 靜態(tài)分析工具:如Coverity、Lint等,能夠幫助發(fā)現(xiàn)潛在的代碼缺陷和安全漏洞。 2. 單元測(cè)試和集
    發(fā)表于 01-15 10:48

    嵌入式工程師常用的開(kāi)發(fā)工具有哪些?

    。 一、集成開(kāi)發(fā)環(huán)境(IDE) IDE是嵌入式開(kāi)發(fā)的核心工具之一。例如 Keil MDK,它支持多種微控制器架構(gòu),提供了強(qiáng)大的代碼編輯、編譯、調(diào)試功能。工程師可以在一個(gè)集成的環(huán)境
    發(fā)表于 12-20 15:29

    如何使用 RISC-V 進(jìn)行嵌入式開(kāi)發(fā)

    RISC-V是一種開(kāi)源的指令集架構(gòu)(ISA),它允許任何人設(shè)計(jì)、制造和銷(xiāo)售基于RISC-V的處理器,這為嵌入式開(kāi)發(fā)提供了極大的靈活性和創(chuàng)新空間。以下是使用RISC-V進(jìn)行嵌入式開(kāi)發(fā)的基本步驟: 一
    的頭像 發(fā)表于 12-11 17:32 ?2752次閱讀