iT邦幫忙

2021 iThome 鐵人賽

DAY 5
0

今晚我想來點...

麻而不辣的 linker script

[叮咚]

您的外送餐點到瞜, 已經依照您的指示放在門口但不能放在地板了 謝謝 記得給我5星好評

: &@!^&$>%*


首先 今天會簡單說明什麼是linker script,

昨天有提到編譯流程中, 到最後要做成執行檔的步驟會linking多個object起來

一般來說, gcc compiler default會使用internal linker script

$ ld --verbose

經由輸出可以看到

接著Linker script有幾個需要注意的地方

每個object file都有一個section list

裡面記載著每個section的address與offset

而section address的部分還有區分VMA(virtual memory address)與LMA(load memory address), 一般來說LMA==VMA.
以圖例來說, 0x4003f0. 在VMA上為此位址, 而加載時也同樣為0x4003f0.
但如果系統有開ASLR, 則每次加載位址都會加上不定的隨機化位址

所以在寫linker script的時候可以指定每個section在output file的位址

 . = 0x10000;
 .text :
 {
 *(.text)
 }

舉例我們可以放一個counter在0x10000

這樣我們的text section就會從0x10000開始放

那明天就可以開始看我們會實作的lab範例


上一篇
第3砍 - 不亮也光
下一篇
第5砍 - 挺身而出
系列文
砍入式開發學習路線大雜燴8
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言