zoukankan      html  css  js  c++  java
  • 2020-2021-1 20209312《Linux内核原理与分析》第八周作业

    作业信息

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

    1.更新linux/kernel下的menu,并将exec添加进MenuOs中
    下面是更新的代码信息

    rm -rf menu
    git clone https://github.com/mengning/menu.git
    cd menu
    mv test_exec.c test.c
    qemu -kernel ../linux-3.18.6/arch/x86/boot/bzImage -initrd rootfs.img -S -s
    
    吸取了上次博客的经验 直接使用-s 避免在调试的时候连接超时
    

    下面是运行的结果截图:

    MenuOS运行效果如下,可以看到已经增加了一条exec命令

    重新打开一个shell窗口,启动gdb,通过端口1234建立连接,在sys_exec、load_elf_binary、start_thread处设置断点

    gdb
    file linux-3.18.6/vmlinux
    target remote:1234
    //设置断点
    b sys_exec
    b load_elf_binary
    b start_thread
    

    2.调试
    调试过程:



    查看hello的EIF头部

    readelf -h hello
    


    3.总结
    ELF文件头中定义了ELF模数,文件机器字节长度,数据存储方式,版本,运行平台,ABI版本,ELF重定位类型,硬件平台,硬件平台版本,入口地址,程序头入口和长度,段表的位置和长度,段的数量。预处理过程,编译器将C程序的头文件编译进来,还有宏的替换,可以用gcc的参数-E来参看。编译过程,这个阶段编译器主要做词法分析、语法分析、语义分析等,在检查无错误后后,把代码翻译成汇编语言。可用gcc的参数-S来参看。汇编过程,汇编器as将louhao.s 翻译成机器语言保存在louhao.o 中(二进制文本形式)。链接过程,链接器负责处理多个.o文件的并入,结果得到louhao文件,它就是一个可执行的目标文件。
    ELF中有三种不同类型的目标文件:可重定位文件、可执行文件、共享目标文件:
    (1)可重定位文件:这种文件一般是中间文件,还需要继续处理。由编译器和汇编器创建,一个源代码文件会生成一个可重定位文件。用来和其他的目标文件一起来创建一个可执行文件、静态库文件或者共享目标文件(即动态库文件)。读者在编译Linux内核时可能会注意到,每个内核源代码.c文件都会生成一个同名的.o文件,该文件即为可重定位目标文件,最后所有的.o文件会链接为一个文件,即Linux内核。
    (2)可执行文件:一般由多个可重定位文件结合生成,是完成了所有重定位工作和符号解析(除了运行时解析的共享库符号)的文件,文件中保存着一个用来执行的程序。
    (3)共享目标文件:共享库,是指可以被可执行文件或其他库文件使用的目标文件。Linux下共享库后缀为.so的文件,so代表shared object。
    ELF文件的作用是参与程序的链接(建立一个程序)和程序的执行(运行一个程序)。

  • 相关阅读:
    linux CGI GET POST 用户登录
    linux内核 简化版ksetexample.c解析
    定制.vimrc配置文件
    procfs信息读取实现案例
    基于Extent 的文件存储(fiemap)
    inode_operations介绍
    Linux 文件系统概述
    linux硬链接与软连接的区别
    procfs读写信息实例
    VC 常见问题百问 20080129 13:37 271人阅读 评论(0) 收藏
  • 原文地址:https://www.cnblogs.com/ZHANGwg11/p/14053196.html
Copyright © 2011-2022 走看看