Linux下的lds链接脚本基础.pdf

Linux下的lds链接脚本基础.pdf

ID:53000899

大小:272.11 KB

页数:28页

时间:2020-04-10

Linux下的lds链接脚本基础.pdf_第1页
Linux下的lds链接脚本基础.pdf_第2页
Linux下的lds链接脚本基础.pdf_第3页
Linux下的lds链接脚本基础.pdf_第4页
Linux下的lds链接脚本基础.pdf_第5页
资源描述:

《Linux下的lds链接脚本基础.pdf》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、Linux下的lds链接脚本基础0.Contents1.概论2.基本概念3.脚本格式4.简单例子5.简单脚本命令6.对符号的赋值7.SECTIONS命令8.MEMORY命令9.PHDRS命令10.VERSION命令11.脚本内的表达式12.暗含的连接脚本1.概论每一个链接过程都由链接脚本(linkerscript,一般以lds作为文件的后缀名)控制.链接脚本主要用于规定如何把输入文件内的section放入输出文件内,并控制输出文件内各部分在程序地址空间内的布局.但你也可以用连接命令做一些其他事情.连接器有个默认的内置连接脚本,可用ld–verbo

2、se查看.连接选项-r和-N可以影响默认的连接脚本(如何影响?).-T选项用以指定自己的链接脚本,它将代替默认的连接脚本。你也可以使用<暗含的连接脚本>以增加自定义的链接命令.以下没有特殊说明,连接器指的是静态连接器.2.基本概念链接器把一个或多个输入文件合成一个输出文件.输入文件:目标文件或链接脚本文件.输出文件:目标文件或可执行文件.目标文件(包括可执行文件)具有固定的格式,在UNIX或GNU/Linux平台下,一般为ELF格式.若想了解更多,可参考UNIX/Linux平台可执行文件格式分析有时把输入文件内的section称为输入sectio

3、n(inputsection),把输出文件内的section称为输出section(outputsectin).Linux公社(LinuxIDC.com)于2006年9月25日注册并开通网站,Linux现在已经成为一种广受关注和支持的一种操作系统,IDC是互联网数据中心,LinuxIDC就是关于Linux的数据中心。LinuxIDC.com提供包括Ubuntu,Fedora,SUSE技术,以及最新IT资讯等Linux专业类网站。并被收录到Google网页目录-计算机>软件>操作系统>Linux目录下。Linux公社(LinuxIDC.com)设置

4、了有一定影响力的Linux专题栏目。包括:Ubuntu专题Fedora专题RedHat专题SUSE专题红旗Linux专题Android专题Linux公社简介-广告服务-网站地图-帮助信息-联系我们本站(LinuxIDC)所刊载文章不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。本站带宽由[6688.CC]友情提供Copyright©2006-2011Linux公社Allrightsreserved目标文件的每个section至少包含两个信息:名字和大小.大部分section还包含与它相关联的一块数据,称为sectioncontents

5、(section内容).一个section可被标记为“loadable(可加载的)”或“allocatable(可分配的)”.loadablesection:在输出文件运行时,相应的section内容将被载入进程地址空间中.allocatablesection:内容为空的section可被标记为“可分配的”.在输出文件运行时,在进程地址空间中空出大小同section指定大小的部分.某些情况下,这块内存必须被置零.如果一个section不是“可加载的”或“可分配的”,那么该section通常包含了调试信息.可用objdump-h命令查看相关信息.每

6、个“可加载的”或“可分配的”输出section通常包含两个地址:VMA(virtualmemoryaddress虚拟内存地址或程序地址空间地址)和LMA(loadmemoryaddress加载内存地址或进程地址空间地址).通常VMA和LMA是相同的.在目标文件中,loadable或allocatable的输出section有两种地址:VMA(virtualMemoryAddress)和LMA(LoadMemoryAddress).VMA是执行输出文件时section所在的地址,而LMA是加载输出文件时section所在的地址.一般而言,某sect

7、ion的VMA==LMA.但在嵌入式系统中,经常存在加载地址和执行地址不同的情况:比如将输出文件加载到开发板的flash中(由LMA指定),而在运行时将位于flash中的输出文件复制到SDRAM中(由VMA指定).可这样来理解VMA和LMA,假设:(1).datasection对应的VMA地址是0×08050000,该section内包含了3个32位全局变量,i、j和k,分别为1,2,3.(2).textsection内包含由”printf(“j=%d“,j);”程序片段产生的代码.连接时指定.datasection的VMA为0×08050000

8、,产生的printf指令是将地址为0×08050004处的4字节内容作为一个整数打印出来。如果.datasection的LMA为0×08

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。