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


    作业信息

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

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

    在实验楼环境中执行以下命令,向MenuOS中增加exec命令。

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

    在menu里面输入help命令,查看是否存在exec命令

    可见新的文件系统里面已经存在exec命令了。
    在shell中输入以下命令

    qemu -kernel linux-3.18.6/arch/x86/boot/bzImage -initrd rootfs.img -S -s
    

    水平新建一个shell,输入以下命令利用gdb进行调试

    gdb
    file linux-3.18.6/vmlinux
    target remote:1234
    

    在sys_execve、load_elf_binary、start_thread设置断点:

    b sys_execve
    b load_elf_binary
    b start_thread
    

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

    readelf -h hello
    

    总结

    exec函数族的作用是根据指定的文件名找到可执行文件,并用它来取代调用进程的内容,换句话说,就是在调用进程内部执行一个可执行文件。这里的可执行文件既可以是二进制文件,也可以是任何Linux下可执行的脚本文件,如果不是可以执行的文件,那么就解释成为一个shell文件,shell执行。当Linux内核或程序使用fork函数创建子进程后,子进程往往要调用一种exec函数(exec家族的一种)以执行另一个程序;在调用一种exec函数时,该进程执行的程序完全被替换为新程序,而新程序则从其main函数处开始执行,因为调用exec函数并不创建新进程,所以前后的进程ID并未改变,或者说exec函数只是用了一个全新的程序替换了当前进程的正文、数据段和堆栈段。

  • 相关阅读:
    makefile文件编写
    soem函数库的编译
    加秘钥的SSH
    ssh传文件
    ssh1
    安装paramiko的方法
    Ftp客户端(上传文件)
    ftp服务端
    vi编辑器没有颜色的解决办法
    socket服务器
  • 原文地址:https://www.cnblogs.com/Alannic/p/14053862.html
Copyright © 2020-2023  润新知