<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

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

KEIL MDK輸出map文件分析01

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

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

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


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


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

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

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

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

5、第五部分:

Memory Map of the image


//映像的內存分布


Image Entry point : 0x080000ed


//程序的入口點(diǎn):這里應該是RESET_Handler的地址



關(guān)鍵詞: KEILMDKmap文

評論


技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>