1

当我将目标文件链接在一起时,生成的 ELF 可执行文件(仅)具有以下 LOAD 段:

LOAD off    0x00000000 vaddr 0x00008000 paddr 0x00008000 align 2**15
     filesz 0x000010f0 memsz 0x000010f0 flags rwx

链接器ld将所有部分组合成一个rwx段,而不是将可写部分和可执行部分分开。我想防止这种情况。可重定位对象的部分适当地标记为可写或可执行,因此此问题出现在链接时。

那么,是什么决定了如何ld将权限分配给细分市场?链接描述文件似乎没有与此相关的任何内容。它是在构建工具链时指定的吗?

我的目标是 ARM,工具链是arm-linux-gnueabi2.22binutils版。

编辑:链接器脚本在这里。其他链接器选项是-Bdynamic--gc-sections和。-z nocopyreloc--no-undefined

4

1 回答 1

1

通常链接器脚本用于定义节、它们的顺序、是保留它们还是将它们从二进制文件中丢弃(发布构建链接器脚本可能选择删除调试信息)。

以下是链接描述文件的示例: system-onesegment.ld

编辑:要修改部分权限,请将其放在要更改 .section .section_name,“权限”的权限的任何部分之前。

例子:

.text
mov r0, r0
b main
.section .rodata, "ro"
.word 0x00000001
.previous
main: mov r0, r0
于 2012-06-04T16:50:05.627 回答