链接器中链接脚本的作用

[复制链接]

826

主题

826

帖子

446

积分

中级会员

Rank: 3Rank: 3

积分
446
分享到:
发表于 2022-8-22 17:14:30 | 显示全部楼层 |阅读模式
链接器中链接脚本的作用是什么?一般大家对链接脚本的了解可能停留在概念的层面上,而对于链接脚本的作用了解相对较少。今天就跟大家聊聊链接脚本的作用和使用方法。
1链接脚本的意义链接脚本用于描述链接器处理目标文件和库文件的方式
1.合并各个目标文件中的段
2.重定位各个段的起始地址
3.重定位各个符号的最终地址

SECTIONS ???????// 关键字,描述各个段在内存中的布局{ ?.text 0x08048400: ???// 代码段起始地址 ?{ ???*(.text) ???????// 所有文件的代码段合并进入可执行程序 ?} ?. = 0x01000000; ????// 设当前地址 ?s1 = .; ????????// 标识符S的存储地址 ?. += 4; ?s2 = .; ?.data 0x0804a800: ?{ ???*(.data) ?} ?.bss : ?{ ???*(.bss) ?}} ?注意事项:
1.各个段的链接地址必须符合具体的平台规范
2.链接脚本中能够直接定义标识符并指定存储地址
3.链接标本中能够指定源代码中的标识符的存储地址
4.在Linux中,进程代码段(.text)的合法起始地址为【0x08048000,0x08049000】
2 MEMORY的使用默认情况下:链接器认为程序应该加载进入同一个个存储空间。
嵌入式系统中,如果存在多个存储空间,必须使用MEMORY进行存储区域定义。
MEMORY 的属性定义:

MEMORY{RAM0 (WX) : ORIGIN = 0X20000000, LENGTH = 1024KRAM1 (!X) : ORIGIN = 0X04000000, LENGTH = 256K }SECTION{ ?.text : { *(.text) } > RAM0 ?.data : { *(.data) } > RAM0 ?.bss : { *(.bss) } > RAM1} 3 ENTRY 命令指定入口点ENTRY(program)SECTIONS{ ?.text 0x08048400: ?{ ???*(.text) ?}}这里有一点需要说明,在没有指定入口函数时,默认的入口函数时_start函数,原因在于链接器使用了默认的链接脚本,内部明确指明_start函数为入口函数。
看完上述内容,你们对链接器中链接脚本有进一步的了解吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注Vecloud行业资讯频道,感谢各位的阅读!
云专线_海外IDC http://www.vecloud.com/

使用高级回帖 (可批量传图、插入视频等)快速回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则   Ctrl + Enter 快速发布  

发帖时请遵守我国法律,网站会将有关你发帖内容、时间以及发帖IP地址等记录保留,只要接到合法请求,即会将信息提供给有关政府机构。
快速回复 返回顶部 返回列表