如图所示here,某些地址的符号可以与defsym
相关联。我的问题是,部分是否可以这样做?也就是说,给定一些.o
目标文件,是否可以指定将重新定位节的基址?
或者,是否可以在最后一个链接后重新绑定一个部分?也就是说,要更改二进制文件中的一个部分的地址,并使所有受重定位影响的信息(例如该部分之外的相对分支等)正确地重新定位。
如果我的问题不明确,我可以编辑它并添加图片以便更好地解释。
答案 0 :(得分:4)
根据您引用的问题和Linux的标记来判断,我将假设您使用的是GNU ld
。
GNU ld
的简短答案是肯定的,部分可以放在特定地址。
答案越长,您需要创建一个自定义链接描述文件来执行此操作,可以为ld
指定-T。如果您使用gcc
作为ld
的包装器,则需要通过gcc
-Wl,
选项将链接器传递给它。
链接描述文件必须包含以下内容:
SECTIONS {
.text 0x08049000 :
{
foo.o (.text)
bar.o (.text)
}
}
值得注意的是-T选项取代了ld使用的默认链接描述文件。您可能希望修改默认链接描述文件以执行所需操作。可以通过将--verbose
选项传递给ld
而无需任何其他选项来转储默认链接描述文件。
有关链接描述文件的更多信息,请参见LD Manual。