当前位置: 技术问答>linux和unix
请教一段链接脚本
来源: 互联网 发布时间:2016-03-21
本文导语: PHDRS { text PT_LOAD FILEHDR PHDRS; data PT_LOAD; } 看了一下LD的官方文档,不是很明白. 对PHDRS命令实在不了解. | linker脚本中的PHDRS命令需要与SECTIONS命令结合起来看,否则不容易理解. 比如说下面这个脚本: PHDR...
PHDRS {
text PT_LOAD FILEHDR PHDRS;
data PT_LOAD;
}
看了一下LD的官方文档,不是很明白.
对PHDRS命令实在不了解.
text PT_LOAD FILEHDR PHDRS;
data PT_LOAD;
}
看了一下LD的官方文档,不是很明白.
对PHDRS命令实在不了解.
|
linker脚本中的PHDRS命令需要与SECTIONS命令结合起来看,否则不容易理解.
比如说下面这个脚本:
PHDRS
{
text PT_LOAD FILEHDR PHDRS ;
data PT_LOAD ;
}
SECTIONS
{
.text : { *(.text) } :text
.data : { *(.data) } :data
}
ld以该脚本对输入文件进行链接,输出文件中将会包含两个section:.text和.data
以SECTIONS命令中的第一行为例: .text : { *(.text) } :text
这句话是说将输入文件中所有的.text section(中间的*(.text))都链接到输出文件的.text section中.
并将输出文件中的.text section分配到PHDRS命令中定义的名为text的segment中.
PHDRS命令中,
text PT_LOAD FILEHDR PHDRS ;
该语句定义了名为text的一个segment
它的属性为PT_LOAD, 表示它是一个可以被加载的segment
FILEHDR和PHDRS是它的追加属性,分别表示在这个segment中必须包含ELF文件头和必须包含ELF程序文件头
SECTIONS命令和PHDRS命令中的另一行语句也是同理.
上面的叙述里面出现了如下这些概念:
1.section
2.segment
3.ELF文件头
4.ELF程序文件头
一两句话真是难以讲清.如果想知道的话,在我整理好怎么解释之前,
或许可以上网上去搜索一些相关的文章
比如说下面这个脚本:
PHDRS
{
text PT_LOAD FILEHDR PHDRS ;
data PT_LOAD ;
}
SECTIONS
{
.text : { *(.text) } :text
.data : { *(.data) } :data
}
ld以该脚本对输入文件进行链接,输出文件中将会包含两个section:.text和.data
以SECTIONS命令中的第一行为例: .text : { *(.text) } :text
这句话是说将输入文件中所有的.text section(中间的*(.text))都链接到输出文件的.text section中.
并将输出文件中的.text section分配到PHDRS命令中定义的名为text的segment中.
PHDRS命令中,
text PT_LOAD FILEHDR PHDRS ;
该语句定义了名为text的一个segment
它的属性为PT_LOAD, 表示它是一个可以被加载的segment
FILEHDR和PHDRS是它的追加属性,分别表示在这个segment中必须包含ELF文件头和必须包含ELF程序文件头
SECTIONS命令和PHDRS命令中的另一行语句也是同理.
上面的叙述里面出现了如下这些概念:
1.section
2.segment
3.ELF文件头
4.ELF程序文件头
一两句话真是难以讲清.如果想知道的话,在我整理好怎么解释之前,
或许可以上网上去搜索一些相关的文章
|
用于手工设置elf文件中的program head