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

《linux内核原理与分析》第八周作业

这个作业属于哪个课程 2020-2021-1 Linux内核原理与分析
这个作业要求在哪里 2020-2021-1Linux内核原理与分析第八周作业
这个作业的目标 跟踪分析一个execve系统调用内核处理函数、了解ELF文件格式
作业正文 本博客链接

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

1.更新menu,将test_exec变成test.c

2.加载入gdb,并在sys_execve等处加断点,单步执行

3.退出调试状态后输入

redelf -h hello

来查看ELF头部

二、ELF文件格式

ELF由四部分组成:ELF头、程序头、节和节头表,其中ELF头的位置固定,其余不一定
ELF文件头结构定义在“/usr/include/elf.h”头文件下,ELF文件有32位版本和64位版本,故其头文件结构也有32位结构和64位结构,分别定义为Elf32_Ehdr和Elf64_Ehdr。两种版本文件内容一样,只是有些成员的大小不一样。以32位版本的文件头结构Elf32_Ehdr为例:

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;//节头数量![](https://img2020.cnblogs.com/blog/2175016/202011/2175016-20201127144550449-1630798143.png)


    Elf32_Half e_shstrndx;//字符串表段索引
}Elf32_Ehdr;

ELF中有三种不同类型的目标文件:可重定位文件、可执行文件、共享目标文件:
(1)可重定位文件:这种文件一般是中间文件,还需要继续处理。由编译器和汇编器创建,一个源代码文件会生成一个可重定位文件。用来和其他的目标文件一起来创建一个可执行文件、静态库文件或者共享目标文件(即动态库文件)。读者在编译Linux内核时可能会注意到,每个内核源代码.c文件都会生成一个同名的.o文件,该文件即为可重定位目标文件,最后所有的.o文件会链接为一个文件,即Linux内核。
(2)可执行文件:一般由多个可重定位文件结合生成,是完成了所有重定位工作和符号解析(除了运行时解析的共享库符号)的文件,文件中保存着一个用来执行的程序。
(3)共享目标文件:共享库,是指可以被可执行文件或其他库文件使用的目标文件。Linux下共享库后缀为.so的文件,so代表shared object。
ELF文件的作用是参与程序的链接(建立一个程序)和程序的执行(运行一个程序)。

posted @ 2020-11-27 11:58  20209324  阅读(101)  评论(0编辑  收藏  举报