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

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

    一、知识点:
    1、预处理、编译、链接和目标文件的格式
    (1)预处理阶段 :编译器将C源代码中包含的头文件编译进来和执行宏替换等工作。
    gcc -E -o XX.cpp XX.c -m32 (XX.cpp是预处理文件)
    (2)编译器生成汇编代码阶段:gcc首先要检查代码的规范性、是否有语法错误等,以确定代码的实际要做的工作,在检查无误后,gcc把代码翻译成汇编语言。gcc -x cpp-output -S -o hello.s hello.cpp -m32 (XX.s是汇编代码)
    (3)汇编器生成目标代码阶段:把编译阶段生成的XX.S文件转成二进制目标代码。
    gcc -x assembler -c hello.s -o hello.o -m32 (XX.o是目标代码)
    (4)链接器生成可执行文件阶段(将编译输出XX.o文件链接成最终的可执行文件)。gcc -o hello.static hello.c -m32 -static
    (5)运行(若链接没有-o指明,则生成可执行文件默认为a.out)./a.out
    2、ELF目标文件格式
    (1)概述:ELF文件全称是Executable Linking Format(可执行连接格式),最初由unix系统实验室发布,它是应用程序二进制接口(Application Binary Interface,ABI)的一部分。在linux下,它是可执行文件的格式,由System V Release 4在COFF的基础上引入的,与之相对应的就是大家所熟悉的windows下的exe文件,exe文件是由microsoft基于COFF格式改变而成。
    (2)分类:可重定位文件:一般是中间文件,还需要继续处理。由编译器和汇编器创建,一个源代码文件会生成一个可重定位文件。
    可执行文件:一般由多个可重定位文件结合生成,是完成了所有重定位工作和符号解析的文件。
    共享目标文件:共享库,指可以被可执行文件或其他库文件使用的目标文件,例如标准C的库文件libc.so。
    (3)目标文件结构

    (4)相关操作指令
    man elf:查看elf详细的格式定义
    readelf:用于显示一个或多个elf格式的目标文件的信息,可以通过它的选项来控制显示哪些信息。
    objdump:显示二进制文件信息,用于查看目标文件或者可执行的目标文件的构成的gcc工具。
    二、实验七:Linux内核如何装载和启动一个可执行程
    将menu目录删除,利用git命令克隆一个新的menu目录,然后用test_exec.c将test.c覆盖

    rm -rf menu 
    git clone https://github.com/mengning/menu.git
    

    test_exec.c将test.c覆盖,重新编译

    mv test_exec.c test.c
    

    查看添加的Exec函数

    make rootfs
    

    QEMU中利用help命令查看,并执行exec命令

    启动gdb,通过端口1234建立连接,在sys_exec、load_elf_binary、start_thread处设置断点

    按c继续执行

    第三个断点start_thread处,可以看到修改了eip的值

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

  • 相关阅读:
    B.Icebound and Sequence
    Educational Codeforces Round 65 (Rated for Div. 2) D. Bicolored RBS
    Educational Codeforces Round 65 (Rated for Div. 2) C. News Distribution
    Educational Codeforces Round 65 (Rated for Div. 2) B. Lost Numbers
    Educational Codeforces Round 65 (Rated for Div. 2) A. Telephone Number
    Codeforces Round #561 (Div. 2) C. A Tale of Two Lands
    Codeforces Round #561 (Div. 2) B. All the Vowels Please
    Codeforces Round #561 (Div. 2) A. Silent Classroom
    HDU-2119-Matrix(最大匹配)
    读书的感想!
  • 原文地址:https://www.cnblogs.com/wzyxiaowang/p/14057173.html
Copyright © 2011-2022 走看看