zoukankan      html  css  js  c++  java
  • GNU LD之二LD script

    前言

    目前正在从头开发一个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,待续。。。

  • 相关阅读:
    autoreleasepool
    #ifndef/#define/#endif
    类工厂创建单例
    第一篇献给你:Block的回调
    博客纪念日
    [系列教程] Discuz模板的制作方法
    使用Discuz!后台备份和恢复Discuz!站点数据库的方法教程
    discuz x2.5 还原教程
    80后公务员辞职自述:7年收入没涨 能力是听话
    公务员队伍开始动荡了吗?
  • 原文地址:https://www.cnblogs.com/ironx/p/4954845.html
Copyright © 2011-2022 走看看