• 招生咨詢熱線:4008-569-579 
  • 手機(jī)版
    用手機(jī)掃描二維碼直達(dá)商品手機(jī)版
招生咨詢熱線
4008-569-579
機(jī)構(gòu)主頁 > 培訓(xùn)資料 > 嵌入式開發(fā):使用映射文件查找緩沖區(qū)溢出問題
機(jī)構(gòu)主頁 > 培訓(xùn)資料>嵌入式開發(fā):使用映射文件查找緩沖區(qū)溢出問題

嵌入式開發(fā):使用映射文件查找緩沖區(qū)溢出問題

來源:廣州達(dá)內(nèi)教育        時間:2023-05-30        熱度:36℃        返回列表

  緩沖區(qū)溢出是對嵌入式軟件造成嚴(yán)重破壞的錯誤之一。該系統(tǒng)似乎運行良好,然后突然,奇怪的事情開始發(fā)生!一直表現(xiàn)的變量突然以意想不到的值結(jié)束。嵌入式開發(fā)人員經(jīng)常會被難住并花費數(shù)天時間試圖弄清楚發(fā)生了什么,從而浪費了寶貴的時間和金錢。在今天的帖子中,我將向你展示如何快速有效地識別緩沖區(qū)溢出并修復(fù)它們。


  緩沖區(qū)溢出癥狀


  緩沖區(qū)溢出通常會給系統(tǒng)帶來一些開發(fā)人員可以輕松識別的癥狀。這些癥狀通??梢栽谒坪跖c發(fā)生溢出的位置無關(guān)的變量中找到,例如:


  初始化值不正確

  沒有任何代碼作用于變量的變化值

  超出范圍的值應(yīng)該是不可能的




  使用映射文件查找緩沖區(qū)溢出


  在嵌入式開發(fā)中,緩沖區(qū)溢出的問題是它們很難找到,誰知道是什么溢出到變量內(nèi)存空間并破壞了它?如果你懷疑自己有緩沖區(qū)溢出,可以使用一個簡單的過程來查找或排除溢出。


  識別似乎已損壞的變量。


  編譯你的代碼。


  導(dǎo)航到你編譯的項目文件夾并找到你的地圖文件。


  在映射文件中搜索損壞的變量。


  找到后,查看損壞的變量旁邊的變量。這很可能是罪魁禍?zhǔn)祝?/span>


  在你的代碼中搜索罪魁禍?zhǔn)壮跏蓟?/span>


  增加緩沖區(qū)大小,看看這是否確實是原因。


  我有一個行為不正確的變量。所以,我按照上面的步驟,在我的地圖文件中發(fā)現(xiàn)了以下內(nèi)容:




  我的 ScrState 變量在內(nèi)存中的前面有一個 bytesToSend 數(shù)組!

在檢查了這個數(shù)組和使用它的代碼后,我發(fā)現(xiàn)我將緩沖區(qū)覆蓋了 1 個字節(jié),值為 0! 足以將我的 ScrState = True 變量更改為

False。


  結(jié)論


  如果查找緩沖區(qū)溢出的過程很隨意,則很難找到緩沖區(qū)溢出。緩沖區(qū)溢出通常是可重復(fù)的,這允許嵌入式開發(fā)人員追蹤它們導(dǎo)致的損壞??焖偎阉饔成湮募⒆R別前面的變量可以幫助開發(fā)人員快速找到罪魁禍?zhǔn)撞⑿迯?fù)其溢出。

電話咨詢

電話咨詢

咨詢電話:
4008-569-579
回到頂部

回到頂部