符号可以在一定的地址链接defsym如图所示这里。我的问题是,是否可以对部分进行相同的处理?也就是说,给定一些.o目标文件,是否可以指定节将被重定位到的基址?
defsym
.o
或者,是否可以在最终链接之后重新设置部分的基础?也就是说,要更改二进制文件中某个节的地址,并使所有受重定位影响的信息(如该节中的相对分支等)都可以正确地重定位。
如果我的问题不清楚,我可以对其进行编辑并添加图像以更好地解释。
从您参考的问题和Linux标签来看,我将假设您正在使用GNU ld。
ld
对于GNU的简短回答ld是,可以将部分放在特定的地址。
更长的答案是您需要创建一个自定义链接脚本来执行此操作,可以将其指定为-T ld。如果您要gcc用作的包装器ld,则需要通过gcc -Wl,选项将链接器传递给它。
gcc
-Wl,
链接描述文件必须包含如下内容:
SECTIONS { .text 0x08049000 : { foo.o (.text) bar.o (.text) } }
不过,需要注意的是- T选项替代了ld使用的默认链接描述文件。您可能需要修改默认的链接描述文件以执行所需的操作。可以通过将--verbose选项传递给ld而不使用其他任何选项来转储默认的链接描述文件。
--verbose
LD手册中提供了有关链接描述文件的更多信息。