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

  • 相关阅读:
    深入浅出前端本地储存
    移动端H5开发常用技巧总结
    Web API
    嵌入式软件工程师面试题目整理(二)
    嵌入式软件工程师面试题目整理(一)
    扒一扒ELF文件
    SpringCloud — (1) 服务治理Eureka
    asp.net练习①——Application聊天室
    js数字金额转换为大写金额
    SQL触发器
  • 原文地址:https://www.cnblogs.com/cdwodm/p/2920574.html
Copyright © 2011-2022 走看看