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头部信息

  • 相关阅读:
    UI Shader:平面特效火
    !!! 注意区分 lua table 变量的【原地修改】与【重新赋值】
    四舍五入 :先加 0.5, 再向下取整
    预乘α
    【 pivot 】 用代码动态设置 pivot 会导致UI 立即发生位移!
    【DrawCall】 unity 动态合批被打断的规律总结
    Text 首行缩进
    SVN 不小心上传,想要回撤提交,同时还要想保存本地的更改
    unity中打开文件夹选择文件返回文件的路径
    复制文件到指定目录
  • 原文地址:https://www.cnblogs.com/wzyxiaowang/p/14057173.html
Copyright © 2011-2022 走看看