• 2020-2021-1 20209304《Linux内核原理与分析》第八周作业


    作业信息

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

    一、实验过程

    1、输入如下代码,先将menu目录删除,利用git命令克隆一个新的menu目录,然后用test_exec.c将test.c覆盖;

    git clone https://github.com/mengning/menu.git
    cd menu
    mv test_exec.c test.c
    



    刚添加的exec的代码如下所示

    2、用make rootfs重新编译,在QEMU中利用help命令查看,并执行exec命令

    3、使用qemu -kernel linux-3.18.6/arch/x86/boot/bzImage -initrd rootfs.img -S -s冻结内核并进行调试,
    打开gdb,通过端口1234建立连接,在sys_exec、load_elf_binary、start_thread处设置断点;

    4、退出调试之后,使用readelf命令查看elf文件头,如下所示。

    二、实验收获

    1、ELF概述

    (1)“目标文件”指编译器生成的文件,“目标”指类似x86或x64的目标平台,它决定编译器使用的机器指令集。
    (2)“目标文件”也叫ABI,它和“目标平台”是二进制兼容的。
    (3)最古老的目标文件格式是a.out,后来发展为COFF格式,现在linux常用的格式为ELF。
    (4)ELF(Executable and Linkable Format)即可执行并可链接的格式,是一个目标文件格式的标准。
    (5)ELF是一种对象文件的格式,用于定义不同类型的对象文件中都有什么内容,以什么样的格式放这些内容。
    (6)ELF在首部会描绘整个文件的组织结构,还包括了很多系统定义的以及用户自定义的节。

    2、ELF文件的3种类型

    (1)可重定位文件:一般是中间文件,还需要继续处理。由编译器和汇编器创建,一个源代码文件会生成一个可重定位文件。
    内核编译中.o文件便是可重定位目标文件,最后所有的.o文件链接为一个文件,即linux内核
    (2)可执行文件:一般由多个可重定位文件结合生成,是完成了所有重定位工作和符号解析的文件。
    (3)共享目标文件:共享库,指可以被可执行文件或其他库文件使用的目标文件。
    可以理解为没有主函数main的“可执行”文件,只有一堆函数可供其他可执行文调用。
    linux下共享库后缀为.so文件,so代表shared object。

    3、静态链接与动态链接

    静态链接
    在编译链接时直接将需要的执行代码复制到最终可执行文件中。
    代码的装载速度快,执行速度也比较快,对外部的环境依赖度低。
    编译时它会把需要的所有代码都链接进去,应用程序相对比较大。

    动态链接
    在编译时不直接复制可执行代码,而是通过记录一系列符号和参数,在程序运行或加载时将这些信息传递给操作系统。
    装载时动态链接
    这种用法的前提是在编译之前已经明确知道要调用DLL中的哪几个函数,编译时在目标文件中只保留必要的链接信息,而不含DLL函数的代码。
    当程序执行时,调用函数的时候利用链接信息加载DLL函数代码并在内存中将其链接入调用程序的执行空间中(全部函数加载进内存),其主要目的是便于代码共享。
    运行时动态链接
    这种方式是指在编译之前并不知道将会调用哪些DLL函数,完全是在运行过程中根据需要决定应调用哪个函数,将其加载到内存中(只加载调用的函数进内存),并标识内存地址,其他程序也可以使用该程序,并用LoadLibrary和GetProcAddress动态获得DLL函数的入口地址。

  • 相关阅读:
    Linux私房菜——防火墙部分笔记
    ubuntu
    序列求和
    圆的面积
    Fibonacci数列
    JavaScript中定义数组
    C语言中的EOF
    jQuery获取的值去掉px
    jQuery中单引号和双引号的使用
    jQuery报错:Uncaught ReferenceError: $ is not defined
  • 原文地址:https://www.cnblogs.com/houyunzhe/p/14052060.html
Copyright © 2020-2023  润新知