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)

原文地址:https://www.cnblogs.com/matahh/p/14028808.html