加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

linux – 如何在链接时为节指定基本地址,或者如何在链接后为节更

发布时间:2020-12-13 23:02:39 所属栏目:Linux 来源:网络整理
导读:如图所示,符号可以在某些地址与defsym链接.我的问题是,是否可以使用部分进行相同的操作?也就是说,给定一些.o目标文件,是否可以指定部分将重定位到的基址? 或者,是否可以在最后一个链接之后重新定义一个部分?也就是说,要更改二进制文件中的一个部分的地址,
如图所示,符号可以在某些地址与defsym链接.我的问题是,是否可以使用部分进行相同的操作?也就是说,给定一些.o目标文件,是否可以指定部分将重定位到的基址?

或者,是否可以在最后一个链接之后重新定义一个部分?也就是说,要更改二进制文件中的一个部分的地址,并使所有受重定位影响的信息(例如该部分之外的相对分支等)正确地重新定位.

如果我的问题不明确,我可以编辑它并添加图像以便更好地解释.

解决方法

从您引用的问题和 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.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读