链接脚本的基本命令是SECTIONS命令,其形象的描述了输出文件的结构:输出文件中各段、各文件怎么放置。
一个SECTIONS命令内部包含一个或者多个段,段(Section)是链接脚本的基本单元,它表示输入文件中的某部分怎么放置在输出文件中。
完整的链接脚本格式如下,它的核心部分是段(Section):
SECTIONS{
…
sectionname start ALIGN(n) (NOLOAD) : AT(loader)
{contents} >region :phdr =fill
…
}
sectionname和contents是必需的,前者用来命名这个段的段名,猴子用来确定代码中的什么部分放在这个段中。
start是这个段的重定位地址,也称为运行地址。如果代码中有位置相关的指令,程序运行时,这个段必须放在这个地址上。
ALIGN(n)虽然指定了运行地址,但是仍可以使用ALIGN(n)来指定对齐要求—这个对齐的地址才是真正运行的地址。
(NOLOAD):用来告诉加载器,在运行时不用加载这个段。显然,这个选项只有在有操作系统的情况下才有意义。
AT(ldadr):指定这个段在编译出来的映象文件中的地址—加载地址(load address)。如果不适用这个选项,则加载地址等于运行地址。通过这个选项,可以控制各段分别保存输出文件中不同的位置,便于把文件保存到单板上:A段放在A处,B段放在B处,运行前再把A、B段分别读出来组装成一个完整的执行程序。
后续几个选项“>region :phdr =fill”很难用到,如果想研究也可以参考链接脚本的语法,那里面有详细的解释。
读书笔记---链接脚本的语法解析
最新推荐文章于 2025-06-22 22:11:06 发布