zoukankan      html  css  js  c++  java
  • 浅析程序的装载

    在《自己动手写操作系统》中有一段代码,通过这段代码大致可以让人知道装载是怎么回事(静态链接)

    首先要分析下elf的文件结构,我就简单的说了,elf首先是一个文件头表,顾名思义,这个文件头表里面保存的是文件的信息,其中一个很重要的信息是程序的入口地址,接着还有若

    干程序头表,这个比较重要,每一个程序头表对应着elf可执行文件中的一段。程序头表中包含有所描述的段要加载到内存的那个位置,还有段的大小。

    有了上述这些信息,下面就来说下程序的装载的步骤:

    1. 检查elf可执行文件格式的有效性,比如魔术,程序头表中段的数量

    2.根据elf可执行文件的程序头表的描述,对elf文件进行映射,比如代码,数据,只读数据

    3.初始化elf进程环境

    4将系统调用的返回地址修改成elf可执行文件的入口点,这个入口点取决于程序的链接方式,对于静态链接的可执行文件,这个程序的入口地址就是就是文件头中所提到的

    这里在提下我以前没有注意的两个概念

    段表VS程序头表

    程序头表只在可执行文件中有,它描述了可执行文件和虚拟空间的映射(segment)

    段表在任何elf文件中都有(section)

    段表包含elf文件中各个段的信息

    程序头表把段表中相同权限的段合并到一起当做一个segment映射,旨在减少对齐所浪费的空间

    一个segment对应一个VMA,从装载的角度重新划分了各个elf可执行文件的段

  • 相关阅读:
    hdu 1754 线段树 注意线段树节点的设计 求什么,设什么
    hdu 4015 概率题
    poj 1950 回溯
    最大上升子序列
    JVM学习博客
    2012
    i am alone at a crossroads
    易知难
    牢骚。。
    something
  • 原文地址:https://www.cnblogs.com/cdwodm/p/2920574.html
Copyright © 2011-2022 走看看