zoukankan      html  css  js  c++  java
  • 2020-2021-1 20209305 《Linux内核原理与分析》第八周作业

    作业信息

    这个作业属于哪个课程 <2020-2021-1Linux内核原理与分析)>
    这个作业要求在哪里 <2020-2021-1Linux内核原理与分析第八周作业>
    这个作业的目标 <Linux内核如何装载和启动一个可执行程序>
    作业正文 https://www.cnblogs.com/baoxiyuan/p/14028515.html

    1.ELF文件的作用

      1.如果用于编译和链接,则编译器和链接器将把ELF文件看做节的集合,所有节由节头表描述,程序头表可选。
      2.如果用于加载执行,则加载器将把ELF文件看做程序头表描述的段的集合,一个段可能包含多个节和节头表可选。
      3.如果是共享文件,则两者都包含。
    

    2.程序从源代码到可执行文件的步骤

      预处理
      gcc -E hello.c -o hello.i
      编译、
      gcc -S hello.i hello.s -m32
      汇编
      gcc -C hello.s -o hello.o -m32
      链接
      gcc hello.o -o hello -m32 -static
    

    3.静态链接与动态链接

      1.静态链接
        在编译链接时直接将需要的执行代码复制到最终可执行文件中,有点事代码的装载速度快,执行速度也比较快,对外部
      环境依赖度低。编译时它会把需要的所有代码都链接进去,应用程序相对比较大,缺点是如果多个应用程序使用同一库函数,
      会被装载多次,浪费内存。
      2.动态链接
        在编译时不直接复制可执行代码,而是通过记录一系列符号和参数,在程序运行或加载时将这些信息传递给操作系统。操作系统
      负责将需要的动态库加载到内存中,然后程序在运行到指定的代码时,去共享执行内存中已经加载的动态库去执行代码,最终达到
      运行时链接的目的。优点是多个程序可以共享同一段代码,而不需要在磁盘上存储多个复制。缺点是在运行时加载,可能会影响程序
      的前期执行性能,而且对使用的库依赖性较高,在升级时特别容易出现版本不兼容的问题。
    

    4.命令行参数和环境变量保存

    5.

      启动内核
    


    查看test.c代码


    设置断点,进行单步调试

  • 相关阅读:
    Json2JsonArray JsonArray2StringArray
    循环结构
    类型转换代码
    字符串的截取拼接
    循环语句,选择结构的相关代码
    Java代码2-运算符简单运用
    Java代码1
    集合框架
    接口
    继承多态
  • 原文地址:https://www.cnblogs.com/baoxiyuan/p/14028515.html
Copyright © 2011-2022 走看看