GNU链接脚本学习(1)

最简单的链接脚本只有一个命令'SECTIONS',使用'SECTIONS'命令描述输出文件内存布局。

'SECTIONS'命令是非常强大的,在这我们将解释它的简单用法。

现在假设你的程序只是由单一代码段初始化数段未初始化数据段,分别对应'.text'、'.data'、'.bss'的段名。再假设输入文件中也只出现这些段。

在这个例子中,制定代码段装入地址在0x10000,数据段开始在0x8000000,下面脚本即是脚本描述:

SECTIONS

{

. = 0x10000;

.text :

*(.text) 

}

. = 0x8000000;

.data :

*(.data) 

}

.bss : 

*(.bss) 

}
     }

关键字'SECTIONS'作为命令,后面跟随的是花括号中包含符号分配和输出描述串。

在'SECTIONS'里面第一行特殊符号'.'是用作位置计数。如果你没有以其它方式指定输出段地址(其它方式以后在讲解),则地址被设置成位置计数的当前值。位置计数依从输出区大小增长,在'SECTIONS'命令起始处位置计数赋值为0。

第二行定义输出区'.text',冒号是语法必须的,现在可以忽略。输出区名字后面的花括号内,列出所有输入区名字,他们将被安置到输出区中。'*'是通配符,匹配任何文件名。表达式'*(.text)'意思是所有输入文件的输入区。

因为位置计数在输出区中定义为0x10000,链接器就会设置输出文件'.text'地址到0x10000

剩下行定义输出文件'.data'和'.bss'区,链接器将安排'.data'输出区在地址0x8000000。链接器安排好'.data'输出区后,位置计数的值将是0x8000000加'.data'输出大小,作用就是链接器在内存中紧跟'.data'输出区安排'.bss'输出区。

链接器确保每个输出区是对齐的,需要时通过增长位置计数。这个例子中指定'.text'和'.data'区地址将满足强制对齐,但是链接器可能会建立间隙在'.data'和'.bss'之间。

到此为止,这就是一个简单而又完整的链接脚本.


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值