2014-12-10 32 views
2

我試圖使用鏈接器參數-Ttext =LD -Ttext產生填充

它做什麼,我需要它指定一個64位的ARMv8 ELF的.text段的地址與64KB的可執行文件併產生一個.text部分,其中正確引用.data

ld -Ttext=40000000 -Tdata=40001000 main.o 
objdump -h a.out 
a.out:  file format elf64-littleaarch64 

Sections: 
Idx Name   Size  VMA    LMA    File off Algn 
    0 .text   00000278 0000000040000000 0000000040000000 00010000 2**2 
        CONTENTS, ALLOC, LOAD, READONLY, CODE 
    1 .data   00000004 0000000040001000 0000000040001000 00011000 2**2 
        CONTENTS, ALLOC, LOAD, DATA 
    2 .comment  0000003a 0000000000000000 0000000000000000 00011004 2**0 
        CONTENTS, READONLY 

我遇到的問題是文件偏移量。爲什麼ld放棄應該小於4KB的文件並將.text文件放在64K?一旦它被加載到主內存中,這不是問題 - 但是磁盤上的存儲可能會產生問題。

有沒有命令行選項來防止這種情況?

編輯:所以它看起來像程序段對齊到0x10000 - 我沒有看到一個選項來調整此對齊方式。也許鏈接腳本是我唯一的解決方案?

回答

0

使用option -n or --nmagic

關閉部分頁面對齊,並禁用鏈接到的共享庫。 如果輸出格式支持Unix樣式幻數,請將輸出標記爲「NMAGIC」。