天天看點

ARM代碼重定位分析關于位置有關碼和無關碼

關于位置有關碼和無關碼

前言

問題來源,NOR FLASH雖然可以XIP執行,但是像全局變量/靜态全局變量這種需要進行修改的話,NOR FLASH便不是一個很好的方案,隻能在RAM裡面修改,代碼以及常量在NOR裡面讀取,資料在RAM裡面,首先我們講一下相關概念

開始

1、位置有關碼

目前的指令通路絕對實體位置,如:ldr pc ,#0X100000 mov pc , #0x10000

這裡位置0x10000絕對固定

這樣代碼資料或者指令位置變動對代碼有毀滅性的影響

2、位置無關碼

目前指令通路相對位置,如 b [pc,#4],根據目前的相對位置來确定資料

3、運作位址

目前pc的位址

4、連結位址

makefile使用ld檔案中記憶體分布描述位址情況

以STM32為例我來介紹一下情況,代碼過幾天補上,這幾天開題,比較忙~

首先看一個經典的的

; *************************************************************
; *** Scatter-Loading Description File generated by uVision ***
; *************************************************************

LR_IROM1 0x08000000 0x00010000  {    ; load region size_region
  ER_IROM1 0x08000000 0x00010000  {  ; load address = execution address
   *.o (RESET, +First)
   *(InRoot$$Sections)
   .ANY (+RO)
  }
  RW_IRAM1 0x20000000 0x00005000  {  ; RW data
   .ANY (+RW +ZI)
  }
}
           

上面形容的是程式加載到0x08000000的flash處,區間長度為0x10000,讀寫,初始化為0的資料放在0x200000000為首位址,區間長度為0x5000的sram處。

加入我們想要程式全部運作在sram裡面怎麼辦呢

end

修改連結檔案,後面開完題再寫吧,老師催了