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

    作业信息

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

    1.实验目的
    理解编译链接的过程和ELF可执行文件格式。
    编程使用exec*库函数加载一个可执行文件,动态链接分为可执行程序装载时动态链接和运行时动态链接,编程练习动态链接库的这两种使用方式。
    使用gdb跟踪分析一个execve系统调用内核处理函数sys_execve ,验证您对Linux系统加载可执行程序所需处理过程的理解。
    2.实验内容
    根据实验楼实验七,使用gdb跟踪分析一个execve系统调用内核处理函数sys_execve。
    更新menu,和test.c,代码如下:

    rm menu -rf      
    git clone http://github.com/mengning/menu.git    
    mv test_exec.c test.c  
    


    使用gdb 跟踪调试,代码还像以前一样:

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

     gdb
      (gdb) file linux-3.18.6/vmlinux
      (gdb) target remote:1234
      b sys_execve
      b load_elf_binary
      b start_thread
    

    最后退出调试状态后输入redelf -h hello可以查看hello的ELF头部

    对ELF的头部进行分析:
    typedef struct {
    unsigned char e_ident[EI_NIDENT];
    Elf32_Half e_type;
    Elf32_Half e_machine;
    Elf32_Word e_version;
    Elf32_Addr e_entry;
    Elf32_Off e_phoff;
    Elf32_Off e_shoff;
    Elf32_Word e_flags;
    Elf32_Half e_ehsize;
    Elf32_Half e_phentsize;
    Elf32_Half e_phnum;
    Elf32_Half e_shentsize;
    Elf32_Half e_shnum;
    Elf32_Half e_shstrndx;
    } Elf32_Ehdr;
    _type 它标识的是该文件的类型。
    e_machine 表明运行该程序需要的体系结构。
    e_version 表示文件的版本。
    e_entry 程序的入口地址。
    e_phoff 表示Program header table 在文件中的偏移量(以字节计数)。
    e_shoff 表示Section header table 在文件中的偏移量(以字节计数)。
    e_flags 对IA32而言,此项为0。
    e_ehsize 表示ELF header大小(以字节计数)。
    e_phentsize 表示Program header table中每一个条目的大小。
    e_phnum 表示Program header table中有多少个条目。
    e_shentsize 表示Section header table中的每一个条目的大小。  
    e_shnum 表示Section header table中有多少个条目。 
    e_shstrndx 包含节名称的字符串是第几个节(从零开始计数)。
    3.实验分析
    1.elf文件基本概念
    elf文件是一种目标文件格式,用于定义不同类型目标文件以什么样的格式,都放了些什么东西。主要 用于linux平台。windows下是PE/COFF格式。
    可执行文件、可重定位文件(.o)、共享目标文件(.so)、核心转储文件都是以elf文件格式存储的。
    ELF文件组成部分:文件头、段表(section)、程序头
    2.elf文件结构
    文件头:
    elf文件头定义了文件的整体属性信息,比较重要的几个属性是:魔术字,入口地址,程序头位置、长度和数量,文件头大小(52字节),段表位置、长度和 个数。
    段表:
    几个重要的段:.text(代码)段 、.data(数据)段、.bss段 。
    .text:保存程序代码,权限为只读
    .data:保存已初始化的全局变量和局部静态变量,可读可写
    .bss:保存未初始化的全局变量和局部静态变量。初始化为0的变量也会保存在.bss段。可读可写。
    3.elf文件装载

    参考文章(https://blog.csdn.net/muaxi8/article/details/79627859)

  • 相关阅读:
    检测是否安装了新包
    redux和mobx的比较
    ssh登录远程服务器
    法律
    如何解决二方包彼此依赖?
    创业
    【转】裸辞4个月,面试30家公司。
    添加群机器人
    RESTful状态码说明
    MongoDB简单介绍以及基本命令
  • 原文地址:https://www.cnblogs.com/matahh/p/14028808.html
Copyright © 2011-2022 走看看