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可执行文件的段

  • 相关阅读:
    什么时候是个头?
    生活就是这样
    差距究竟在哪里?
    认识到三个问题
    研究生三件事
    重写DNN6.2注册、登陆、修改等个人中心
    SQL游标的使用
    SQL UPDATE实现多表更新
    SQL 百万级两表数据间更新和添加
    DNN路径
  • 原文地址:https://www.cnblogs.com/cdwodm/p/2920574.html
Copyright © 2011-2022 走看看