简单的链接脚本例子

2 篇文章 0 订阅

3.3 简单的链接脚本例子
    很多链接脚本都非常简单。
    最简单的链接脚本只有一个命令:"SECTIONS"。你用这个命令去描述输出文件的内存的布局。
    "SECTIONS"命令是一个非常强大的命令。我们在这会描述一个它的简单的使用。让我们假设你的程序只包含了代码,初始化了的数据,和没有初始化的数据。
它们将会分别在'.text','.data'和'.bss'分区内。让我们进一步假设你的输入文件只有一个。
    对于这个例子,让我们假设代码会加载在地址 0x10000,然后数据会从地址 0x8000000开始。那么链接脚本如下:
        SECTIONS
    {
       . = 0x10000;
       .text : { *(.text) }
       . = 0x8000000;
       .data : { *(.data) }
       .bss : { *(.data) }
    }
    你使用了 "SECTIONS"命令作为关键字,然后输入一系列用括号括起来的符号分配和输出分区描述。
    上面例子的"SECTIONS"命令里面的第一行是设置'.'的值,也就是位置计数器。如果你不用一些别的方式(后面会描述)去制定输出分区的地址,那么分区地址会根据当前
位置计数器的值去设置。然后位置计数器的值会根据输出分区的长度去增长。在"SECTIONS"命令的开始,位置计数器的值是'0'。
    第二行命令定义了一个输出分区,'.text'。从现在开始会被忽略。'*'表示匹配所有的文件名字。 '*(.text)'表达式的意思是所有的输入文件的有'.text'部分。
    因为'.text'的值定义为0x10000, 所以链接器会把输出文件的'.text'部分都放在地址'0x10000'。
    剩下的行定义了输出文件的'.data'和 '.bss'部分。链接器会把输出的'.data'部分放到地址'0x8000000'。连接器把输出的'.data'部分放置好后,位置计数器的值等于
'0x8000000'加上输出部分'.data'的长度。这样的效果是连接器会把输出的'.bss'部分放置在'.data'之后。 
    为了去确保输出的每一部分是按照要求的对齐,链接器会根据需要去增加位置计数器的值。在这个例子里'.text'和'.data'部分会满足任何一种对齐条件,但是链接器可能
必须去在'.text'和'.data'部分之间去创建一个最小的间隙。
    就这些了!这就是一个简单但完整的链接脚本的例子。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值