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,待续。。。

  • 相关阅读:
    redis基础
    Django Meta
    Django Query
    Django FileFieldManage
    Django Managers管理器
    Django 模型
    Pytables h5py
    python 高级部分
    Python和HDF 5大数据应用
    是时候放弃pipeline 模型 ?
  • 原文地址:https://www.cnblogs.com/ironx/p/4954845.html
Copyright © 2011-2022 走看看