作业信息

这个作业属于哪个课程 <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代码


设置断点,进行单步调试

posted on 2020-11-29 11:18  20209305鲍溪媛  阅读(71)  评论(0编辑  收藏  举报