【问题标题】:ld -Ttext produces an executable with 64KB of paddingld -Ttext 生成一个带有 64KB 填充的可执行文件
【发布时间】:2015-02-09 06:55:19
【问题描述】:

我正在尝试使用链接器参数 -Ttext= 指定 64 位 ARMv8 ELF 的 .text 部分的地址

它会做我需要的事情并生成一个正确引用 .data 的 .text 部分

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 put 炸毁应该小于 4KB 的文件并将 .text 放在 64K ?一旦加载到主内存就不是问题 - 但磁盘上的存储可能会出现问题。

是否有命令行选项可以防止这种情况发生?

编辑:所以看起来程序段与 0x10000 对齐 - 我没有看到调整此对齐的选项。也许链接器脚本是我唯一的解决方案?

【问题讨论】:

    标签: gcc arm ld elf


    【解决方案1】:

    使用option -n or --nmagic:

    关闭部分的页面对齐,并禁用对共享库的链接。 如果输出格式支持 Unix 风格的幻数,则将输出标记为“NMAGIC”。

    【讨论】:

      猜你喜欢
      • 2013-03-09
      • 2021-12-04
      • 1970-01-01
      • 2020-08-07
      • 2016-03-02
      • 2018-11-14
      相关资源
      最近更新 更多