<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > KEIL MDK輸出map文件分析01

          KEIL MDK輸出map文件分析01

          作者: 時間:2016-11-28 來源:網(wǎng)絡(luò) 收藏

          果然,在剛開始執(zhí)行程序時,R10和R11的值就已經(jīng)被賦值成了這兩個值。

          很快就將0x08002dc0到0x08002dcf處的16個字節(jié),4個雙字加載到了R0-R3,我們可以分析一下里面的內(nèi)容,R0就是程序加載視圖的RW區(qū)的起始地址(0x08002de0),R1就是要輸出的執(zhí)行視圖的RW區(qū)的地址(0x20000000),R2就是要復(fù)制的RW數(shù)據(jù)的個數(shù),R3是復(fù)制函數(shù)(__scatterload_copy)的地址,類似于一個回調(diào)函數(shù)。接下來就要用了:0x0800011E 4718BXr3這條指令去執(zhí)行復(fù)制工作。


          下來又將0x08002dd0到0x08002ddf處的16個字節(jié),4個雙字加載到了R0-R3,我們可以分析一下里面的內(nèi)容,R0就是程序加載視圖的RW區(qū)的起始地址(0x08002de0+0x20=0x08002e00),R1就是要輸出的執(zhí)行視圖的RW區(qū)的地址(0x20000020),R2就是要復(fù)制的RW數(shù)據(jù)的個數(shù),R3是ZI區(qū)域建立函數(shù)(__scatterload_zeroinit)的地址。


          執(zhí)行完成后,程序就會進(jìn)入BL.W__rt_entry處進(jìn)行庫的初始化工作。

          經(jīng)過這么一分析,現(xiàn)在我對于程序的加載映像和執(zhí)行映像有了較深的理解:程序的RO_Code加上RO_Data總共是0x2dc0這么大,地址范圍0x0800,0000到0x8000,2dbf。然后在0x0800,2dc0-2dcf共16個字節(jié)放了RW加載映像地址(0x0800,2de0)、執(zhí)行映像地址(0x2000,0000)、RW長度(0x20)和將該段數(shù)據(jù)從加載映像復(fù)制到執(zhí)行映像的函數(shù)地址。在0x0800,2dd0-2ddf共16個字節(jié)放了ZI加載映像地址(0x0800,2e00)、執(zhí)行映像地址(0x2000,0020)、ZI長度(0x480)和建立ZI、HEAP和STACK執(zhí)行映像的函數(shù)地址。

          在上面的第二個階段,將ZI清零階段,程序的ZI長度實際上只有0x20,而庫代碼留出了0x60的長度。因此數(shù)據(jù)區(qū)的頂端為0x2000,00a0-1。接下來從0x2000,00a0開始為堆的起始地址,堆長度加上程序棧長度為0x2000,04a0,這就是堆棧頂端,也是__initial_SP的初始值。

          程序進(jìn)入_rt_entry后,還要對heapstack進(jìn)行處理,但我沒有看到有什么用的變化。從中對庫留出的ZI數(shù)據(jù)區(qū)進(jìn)行了一些處理,我暫時也看不明白。好了,調(diào)試就到這里,回到map文件分析的正途。

          5、第五部分:

          Memory Map of the image


          //映像的內(nèi)存分布


          Image Entry point : 0x080000ed


          //程序的入口點:這里應(yīng)該是RESET_Handler的地址



          關(guān)鍵詞: KEILMDKmap文

          評論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();