如何在链接时指定段的基地址,或者链接后如何指定段的基地址?

符号可以在某些地址与defsym链接,如图所示。 我的问题是,是否可以用部分来完成? 也就是说,给定一些.o目标文件,是否可以指定部分将被重定位到的基地址?

或者,是否有可能在最终链接之后重新绑定一个部分? 也就是说,要更改一个二进制文件的地址,并将所有受重新定位影响的信息(比如相关的分支等)移动到正确的位置。

如果我的问题不清楚,我可以编辑它,并添加一个图像来解释更好。

从你引用的问题和Linux的标签来看,我将假定你正在使用GNU ld

GNU ld的简短答案是肯定的,部分可以放在特定的地址。

较长的答案是,你将需要创建一个自定义的链接脚本来做到这一点,可以指定-T为ld 。 如果你使用gcc作为ld的包装器,你需要通过gcc -Wl,选项把它传递给链接器。

链接器脚本将不得不包含如下内容:

 SECTIONS { .text 0x08049000 : { foo.o (.text) bar.o (.text) } } 

需要注意的是,-T选项替换了ld使用的默认链接脚本。 你可能想要修改默认的链接描述文件来做你想要的。 可以通过将--verbose选项传递给ld而没有任何其他选项来转储默认的链接描述文件。

有关链接器脚本的更多信息,请参阅“ LD手册” 。