连接脚本分析.doc

  1. 1、本文档共12页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
连接脚本分析

链接脚本分析(2) (2009-01-21 14:22:22) 转载 标签: 5. 简单脚本命令 -------------------------------------------------------------------------------- - 1 - ENTRY(SYMBOL) : 将符号SYMBOL的值设置成入口地址. ? 入口地址(entry point): 进程执行的第一条用户空间的指令在进程地址空间的地址) ld有多种方法设置进程入口地址, 按一下顺序: (编号越前, 优先级越高) 1, ld命令行的-e选项 2, 连接脚本的ENTRY(SYMBOL)命令 3, 如果定义了start符号, 使用start符号值 4, 如果存在.text section, 使用.text section的第一字节的位置值 5, 使用值0 - 2 - INCLUDE filename : 包含其他名为filename的链接脚本 ? 相当于c程序内的的#include指令, 用以包含另一个链接脚本. 脚本搜索路径由-L选项指定. INCLUDE指令可以嵌套使用, 最大深度为10. 即: 文件1内INCLUDE文件2, 文件2内INCLUDE文件3... , 文件10内INCLUDE文件11. 那么文件11内不能再出现 INCLUDE指令了. - 3 - INPUT(files): 将括号内的文件做为链接过程的输入文件 ? ld首先在当前目录下寻找该文件, 如果没找到, 则在由-L指定的搜索路径下搜索. file可以为 -lfile形式,就象命令行的-l选项一样. 如果该命令出现在暗含的脚本内, 则该命令内的file在链接过程中的顺序由该暗含的脚本在命令行内的顺序决定. - 4 - GROUP(files) : 指定需要重复搜索符号定义的多个输入文件 ? file必须是库文件, 且file文件作为一组被ld重复扫描,直到不在有新的未定义的引用出现. - 5 - OUTPUT(FILENAME) : 定义输出文件的名字 ? 同ld的-o选项, 不过-o选项的优先级更高. 所以它可以用来定义默认的输出文件名. 如a.out - 6 - SEARCH_DIR(PATH) :定义搜索路径, ? 同ld的-L选项, 不过由-L指定的路径要比它定义的优先被搜索. - 7 - STARTUP(filename) : 指定filename为第一个输入文件 ? 在链接过程中, 每个输入文件是有顺序的. 此命令设置文件filename为第一个输入文件. - 8 - OUTPUT_FORMAT(BFDNAME) : 设置输出文件使用的BFD格式 ? 同ld选项-o format BFDNAME, 不过ld选项优先级更高. - 9 - OUTPUT_FORMAT(DEFAULT,BIG,LITTLE) : 定义三种输出文件的格式(大小端) ? 若有命令行选项-EB, 则使用第2个BFD格式; 若有命令行选项-EL,则使用第3个BFD格式.否则默认选第一个BFD格式. TARGET(BFDNAME):设置输入文件的BFD格式 ? 同ld选项-b BFDNAME. 若使用了TARGET命令, 但未使用OUTPUT_FORMAT命令, 则最用一个TARGET命令设置的BFD格式将被作为输出文件的BFD格式. 另外还有一些: ASSERT(EXP, MESSAGE):如果EXP不为真,终止连接过程 EXTERN(SYMBOL SYMBOL ...):在输出文件中增加未定义的符号,如同连接器选项-u FORCE_COMMON_ALLOCATION:为common symbol(通用符号)分配空间,即使用了-r连接选项也为其分配 NOCROSSREFS(SECTION SECTION ...):检查列出的输出section,如果发现他们之间有相互引用,则报错.对于某些系统,特别是内存较紧张的嵌入式系统,某些section是不能同时存在内存中的,所以他们之间不能相互引用. OUTPUT_ARCH(BFDARCH):设置输出文件的machine architecture(体系结构),BFDARCH为被BFD库使用的名字之一.可以用命令objdump -f查看. 可通过 man -S 1 ld查看ld的联机帮助, 里面也包括了对这些命令的介绍. 6. 对符号的赋值 -------------------------------------------------------------------------------- 在目标文件内定义的符号可以在链接脚本内被赋值. (注意和C语言中赋值的不同!) 此时该符号被定义为全局的. 每个符号都对应了一个地址

文档评论(0)

qwd513620855 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档