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


    作业信息

    这个作业属于哪个课程 <2020-2021-1Linux内核原理与分析)>
    这个作业要求在哪里 <2020-2021-1Linux内核原理与分析第八周作业>
    这个作业的目标 <Linux内核如何装载和启动一个可执行程>
    作业正文 <博客>

    实验:使用gdb跟踪分析一个execve系统调用内核处理函数

    1.在实验楼环境中执行以下命令,向MenuOS中增加exec命令。然后在qume中执行help命令可以看到fork命令。

    cd LinuxKernel
    rm -rf menu
    git clone https://github.com/mengning/menu.git
    cd menu
    mv test_exec.c test.c
    make rootfs
    

    2.开启调试模式,设置断点,查看execve函数的执行过程。

    //开启调试模式
    qemu -kernel linux-3.18.6/arch/x86/boot/bzImage -initrd rootfs.img -S -s
    gdb
    file linux-3.18.6/vmlinux
    target remote:1234
    


    设置断点

    b sys_exec
    

    b load_elf_binary
    b start_thread
    



    退出调试状态后,查看hello的EIF头部信息

    readelf -h hello
    

    总结

    1.ELF(Executable and Linkable Format)可执行的和可链接的格式。(对应Windows为PE)
    其包含了以下三类:
    可重定位文件:保存着代码和适当的数据,用来和其它的目标文件一起来创建一个可执行文件、静态库文件或者是一个共享目标文件
    可执行文件:保存着一个用来执行的程序,一般由多个可重定位文件结合生成,是完成了所有重定位工作和符号解析(除了运行时解析的共享库符号)的文件。
    共享目标文件:保存着代码和合适的数据,用来被两个链接器链接。第一个是链接编辑器(静态链接),可以和其它的可重定位和共享目标文件来创建其它的object。第二个是动态链接器,联合一个可执行文件和其它的共享目标文件来创建一个进程映象。
    2.ELF文件格式如下图:

    3.ELF文件的作用
    如果用于编译和链接,则编译器和链结器将把ELF文件看作节的集合,所有节由节头表描述,程序头表可选
    如果用于加载执行(可执行文件),则加载器将把ELF文件看作程序头表描述的段的集合,一个段可能包含又多个节和节头表可选
    如果是共享文件,则两者都含有
    4.exec函数族的作用是根据指定的文件名找到可执行文件,并用它来取代调用进程的内容,换句话说,就是在调用进程内部执行一个可执行文件。这里的可执行文件既可以是二进制文件,也可以是任何Linux下可执行的脚本文件,如果不是可以执行的文件,那么就解释成为一个shell文件,shell执行。
    5.当Linux内核或程序使用fork函数创建子进程后,子进程往往要调用一种exec函数(exec家族的一种)以执行另一个程序;在调用一种exec函数时,该进程执行的程序完全被替换为新程序,而新程序则从其main函数处开始执行,因为调用exec函数并不创建新进程,所以前后的进程ID并未改变,或者说exec函数只是用了一个全新的程序替换了当前进程的正文、数据段和堆栈段。

  • 相关阅读:
    Javascript加载执行问题探索
    CentOS搭建WordPress
    ORACLE创建表空间,用户及授权
    ApacheCommonsDbutils 学习笔记
    Android SSL BKS证书生成, 以及PFX与JKS证书的转换
    VirtualBox虚拟机CentOS中安装增强插件失败,解决方法
    ORACLE %TYPE与%ROWTYPE
    Java代码调用C#实现的Web服务
    常用的Git命令
    js手机号正则表达式验证
  • 原文地址:https://www.cnblogs.com/gann/p/14052841.html
Copyright © 2020-2023  润新知