2021-2022-1 20212808 《Linux内核原理与分析》第八周作业

本文介绍了Linux内核的基本概念,Linux系统执行过程,特别是ELF文件格式的详细内容,包括可重定位文件、可执行文件和共享目标文件的类型。此外,还探讨了程序从源代码到可执行文件的步骤,以及预处理、编译、汇编和链接的过程。文章还讨论了fork和execve系统调用的区别,强调了execve在加载可执行文件时如何覆盖当前进程的程序。最后,通过实验介绍了如何使用exec*库函数进行动态链接,并通过gdb跟踪execve系统调用的内核处理。
摘要由CSDN通过智能技术生成

Linux内核的实质和Linux系统的一般执行过程

ELF目标文件格式

  • 目标文件(ABI,应用程序二进制接口):编译器生成的文件。
  • 目标文件的格式:out格式、COFF格式、PE(windows)格式、ELF(Linux)格式。
  • ELF(Executable and Linkable Format)即可执行和可链接的格式,是一个目标文件格式的标准。ELF格式的文件用于存储Linux程序。其包含了以下三类:
  1. 可重定位文件:保存着代码和适当的数据,用来和其它的目标文件一起来创建一个可执行文件、静态库文件或者是一个共享目标文件
  2. 可执行文件:保存着一个用来执行的程序,一般由多个可重定位文件结合生成,是完成了所有重定位工作和符号解析(除了运行时解析的共享库符号)的文件。
  3. 共享目标文件:保存着代码和合适的数据,用来被两个链接器链接。第一个是链接编辑器(静态链接),可以和其它的可重定位和共享目标文件来创建其它的object。第二个是动态链接器,联合一个可执行文件和其它的共享目标文件来创建一个进程映象。
  • 程序从源代码到可执行文件的步骤:预处理、编译、汇编、链接
    ①编译器预处理:gcc -E -o XX.cpp XX.c (-m32)
    ②汇编器编译成汇编代码
    gcc -x cpp-output -S -o hello.s hello.cpp (-m32)
    ③汇编代码编译成二进制目标文件
    gcc -x assembler -c hello.s -o hello.o (-m32)
    ④链接成可执行文件
    gcc -o hello.static hello.c (-m32) -static
    在这里插入图片描述
    预处理和编译完的文件均为文本文件,汇编和链接完的文件均为ELF文件。
  • 可执行文件处理过程也是系统调用。
  • 程序装载中fork与execve的区别和联系
  1. 他们都是比较特殊的系统调用
  2. fork在陷入内核态后有两次返回,第一次返回到原来父进程的位置继续向下执行,第二次是在子进程返回,这次会返回到ret_from_fork,之后正常返回用户态。
  3. execve在执行时陷入内核态,在内核中调用execve加载的可执行文件把当前进程的可执行程序给覆盖了,当其返回时,返回的已经不是原来的那个可
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值