首页 > 其他 > 详细

GNU LD和LD脚本解读

时间:2015-11-19 22:22:08      阅读:362      评论:0      收藏:0      [点我收藏+]

前言

目前正在从头开发一个MIPS的嵌入式项目,有机会从零开始写ld脚本,于是趁机把GNU LD的官方文档读了一遍。

链接如下:http://ftp.gnu.org/old-gnu/Manuals/ld-2.9.1/html_mono/ld.html

该文档分为几个章节,为了便于介绍,我在这里也按照文章的阅读顺序,分别把读后感记录在这里。

ld俗称链接器,就是吃进去object files,输出可执行文件。而可执行文件是可以下载到存储器让CPU取指令运行的文件格式。

ld吃下各个object files,并将其消化,最后转换为生命所需的营养(可执行文件),或者shit(错误)。

消化的过程,主要是分析object files里面的符号,例如全局变量,静态变量,函数名等,根据符号的调用关系,以及ld脚本的安排,将符号安排在内存合适的位置。

关于全局变量,静态变量,局部变量,函数,这些分别放在text段,data段,还是堆栈的知识,我就不讲了,有C语言编程经验的人应该都知道,不清楚的可以翻K&R的书。

 

目标文件在其存储器映像文件中的布局

首先我们来看一本书,《MIPS体系结构透视》,在其9.5小节“目标文件在其存储器映像文件中的布局”中,描述了可执行文件中的各个段是如何在存储器映像中布局的。在这一节中有一张图如下所示,可以显示出各个段在内存的存储器中的布局。所以我们在ld脚本中也要按照这个顺序来定义各个段。

 技术分享

至于其中每个段的含义,可以参考这本书的这一节啰。这里挑出一点,就是.sbss,还有.bss这两个的区别,以及.sdata,

GNU LD和LD脚本解读

原文:http://www.cnblogs.com/ironx/p/4954845.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!