巧用map檔案查詢越界問題

2021-10-04 13:46:33 字數 684 閱讀 8132

在基於keil的專案開發過程中,會遇變數值與預設的執行結果不一樣,在掛上**器debug了n個小時,排除了所有邏輯問題後,發現似乎這個值被意外更改了,但是要找到是誰修改了他卻不好下手。現提出一種查詢此類問題的方法——利用map檔案查詢越界。

首先需要設定map的輸出,在mdk-arm的option for target—output listing的標籤頁中設定需要輸出的map檔案內容,如圖:

在工程編譯完成後在設定的目錄下會生成專案名.map的檔案。大致來說map到可以分為如下幾個部分:

現假設在除錯中的乙個全域性變數u8 g_testflag數值與邏輯總是不符,那麼就可以懷疑被意外修改了,在map檔案中搜尋g_testflag,看到在g_testflag所在位址前是乙個u8 upgradefilename[15]。那麼問題就很可能是upgradefilename操作是越界了。

查詢**中發現存在如下操作,

memcpy(upgradefilename,「myupgradefile001.bin」,21);

upgradefilename被memcpy後,越過了它的size範圍,而修改了鄰近位址的g_testflag。

類似的,還有for迴圈運算元組越界,memset操作記憶體越界等,都可以以這種方法來找到問題。

巧用hosts檔案,解決急手問題

巧用hosts檔案,解決急手問題 2011年03月01日 相信大家hosts的作用的了解!今天巧用hosts幫助運維部門解決了乙個很棘手的問題。事情經過簡要描述如下 這裡假設 應用a的ip xx.1 應用b的ip xx.2 將應用b部署到新機器上 xx.3 在應用a機器上的hosts檔案新增 b.y...

巧用hosts檔案,解決急手問題

相信大家hosts的作用的了解!今天巧用hosts幫助運維部門解決了乙個很棘手的問題。事情經過簡要描述如下 這裡假設 應用a的ip xx.1 應用b的ip xx.2 將應用b部署到新機器上 xx.3 在應用a機器上的hosts檔案新增 b.yourdomain.com xx.3 這樣不需要重啟應用a...

二分查詢的越界和死迴圈問題

個人看來,二分查詢有兩個易錯點,那就是 越界 和 死迴圈 這裡拿左閉右閉和左閉右開來說,1 左閉右開 int binarysearch seqlist s,datatype x else if s array mid x else 這裡int left 0,right s size while le...