Linker 在链接器脚本中创建新段,同时保留默认段

Linker 在链接器脚本中创建新段,同时保留默认段,linker,linker-scripts,Linker,Linker Scripts,我在一个链接文件中创建了一些特殊的部分,我希望它们位于不同的段中,以具有不同的页面权限 在链接器脚本中,PHDRS命令可以指定链接文件中的段。但是,正如前面所说,PHDRS不会创建除命令中指定的以外的默认定义的段。我在ld--verbose输出中没有发现PHDRS命令 有没有办法保留默认值?或者,我可以在自己的链接器脚本中编写段的默认规范是什么?在寻找类似答案时遇到了这个问题。很晚了,但可能有人会碰到它。要获取当前使用的链接器脚本,您可以在链接时使用gcc-Wl,--verbose…或ld--v

我在一个链接文件中创建了一些特殊的部分,我希望它们位于不同的段中,以具有不同的页面权限

在链接器脚本中,PHDRS命令可以指定链接文件中的段。但是,正如前面所说,PHDRS不会创建除命令中指定的以外的默认定义的段。我在
ld--verbose
输出中没有发现PHDRS命令


有没有办法保留默认值?或者,我可以在自己的链接器脚本中编写段的默认规范是什么?

在寻找类似答案时遇到了这个问题。很晚了,但可能有人会碰到它。要获取当前使用的链接器脚本,您可以在链接时使用
gcc-Wl,--verbose…
ld--verbose…
,这将把脚本(以及一堆其他内容)转储到stdout。据我所知,在不编写自定义脚本来解析上述输出的情况下,无法保留默认程序头并向其添加条目。另一方面,如果你想添加一个节,显然,
objcopy有一个窍门--addsection
,它允许你将一个节添加到现有的elf文件中。

Stephen Krell有一篇关于如何解决这个问题的文章。它们还提供代码。我把这个链接作为评论而不是答案来分享,因为所展示的方法是一种变通方法,而不是ld链接器提供的标准方法。