日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁 > > 嵌入式案例Show
[導(dǎo)讀]在基于KEIL的項目開發(fā)過程中,會遇變量值與預(yù)設(shè)的運(yùn)行結(jié)果不一樣,在掛上仿真器debug了n個小時,排除了所有邏輯問題后,發(fā)現(xiàn)似乎這個值被意外更改了,但是要找到是誰修改了他卻不好下手。

01

前言

在基于KEIL的項目開發(fā)過程中,會遇變量值與預(yù)設(shè)的運(yùn)行結(jié)果不一樣,在掛上仿真器debug了n個小時,排除了所有邏輯問題后,發(fā)現(xiàn)似乎這個值被意外更改了,但是要找到是誰修改了他卻不好下手?,F(xiàn)提出一種查找此類問題的方法——利用map文件查找越界。

02

MAP文件輸出

首先需要設(shè)置map的輸出,在MDK-ARM的Option for Target—Output Listing的標(biāo)簽頁中設(shè)置需要輸出的map文件內(nèi)容,如圖:

03

MAP文件分析


在工程編譯完成后在設(shè)置的目錄下會生成項目名.map的文件。大致來說map到可以分為如下幾個部分:

  • Section Cross References:模塊、段的交叉引用關(guān)系;

  • Removing Unused input   sections from the image:移除未使用的段;

  • Image Symbol  Table:映射符號表,列出了各個段所存儲的對應(yīng)地址;

  • Memory Map of the image:映像的內(nèi)存分布;

  • Image component sizes:映像組組件大小。

解決越界數(shù)據(jù)修改問題我們主要關(guān)注的是Image Symbol Table部分。例如:

含義為:

  • Symbol Name:符號名稱

  • Value:存儲對應(yīng)的地址;

    0x0800xxxx指存儲在FLASH里面的代碼、變量等。

    0x2000xxxx指存儲在內(nèi)存RAM中的變量Data等。

  • Ov Type:符號對應(yīng)的類型

符號類型大概有幾種:Number、Section、Thumb Code、Data等;

  • Size:存儲大小

  • Object(Section):當(dāng)前符號所在段名

現(xiàn)假設(shè)在調(diào)試中的一個全局變量u8 g_testFlag數(shù)值與邏輯總是不符,那么就可以懷疑被意外修改了,在map文件中搜索g_testFlag,看到在g_testFlag所在地址前是一個u8 upgradeFileName[15]。那么問題就很可能是upgradeFileName操作是越界了。

查找代碼中發(fā)現(xiàn)存在如下操作,

memcpy(upgradeFileName,"MyUpgradeFile001.bin",21);

upgradeFileName被memcpy后,越過了它的size范圍,而修改了鄰近地址的g_testFlag。




免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺僅提供信息存儲服務(wù)。文章僅代表作者個人觀點,不代表本平臺立場,如有問題,請聯(lián)系我們,謝謝!

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