Linux 基础
实验七
作业所属课程 | <2020-2021-1Linux内核原理与分析> |
---|---|
作业要求 | <2020-2021-1Linux内核原理与分析第一周作业> |
作业目标 | 分析Linux内核创建一个新进程的过程 |
作业正文 | 2020-2021-1 20209308《Linux内核原理与分析》第八周作业 |
目录
一.实验过程
1更新内核
1.1下载新版本menu
cd LinuxKernel/ //进入LinuxKernel文件夹
rm -rf menu //将menu目录删除
git clone http://github.com/mengning/menu.git //克隆下载更新了版本之后的menu目录
cd menu
mv test_exec.c test.c
1.2进入menu文件夹,查看更新的exec
cd menu/ //进入menu文件夹
make rootfs //进入MenuOS
1.3在qemu中运行exec
2.gdb调用
cd LinuxKernel //返回LinuxKernel目录
qemu -kernel linux-3.18.6/arch/x86/boot/bzImage -initrd rootfs.img -s -S //启动内核
启动gdb,通过端口1234建立连接,在sys_exec、load_elf_binary、start_thread处设置断点。
(gdb)file linux-3.18.6/vmlinux
(gdb)target remote:1234 //建立连接
(gdb)b sys_exec
(gdb)b load_elf_binary
(gdb)b start_thread
输入readelf -h hello可以查看hello的EIF头部。
二.分析进程的描述与创建
2.1ELF描述
“目标文件”指编译器生成的文件,“目标”指类似x86或x64的目标平台,它决定编译器使用的机器指令集。“目标文件”也叫ABI,它和“目标平台”是二进制兼容的。最古老的目标文件格式是a.out,后来发展为COFF格式,现在linux常用的格式为ELF。ELF(Executable and Linkable Format)即可执行并可链接的格式,是一个目标文件格式的标准。ELF是一种对象文件的格式,用于定义不同类型的对象文件中都有什么内容,以什么样的格式放这些内容。ELF在首部会描绘整个文件的组织结构,还包括了很多系统定义的以及用户自定义的节。
2.2ELF可执行和可链接文件
-可重定位文件(Relocatable File):保存着代码和适当的数据,用来和其它的目标文件一起来创建一个可执行文件、静态库文件或者是一个共享目标文件(主要是.o文件)
-可执行文件(Executable File):保存着一个用来执行的程序,一般由多个可重定位文件结合生成,是完成了所有重定位工作和符号解析(除了运行时解析的共享库符号)的文件。
-共享目标文件(Shared Object File):保存着代码和合适的数据,用来被两个链接器链接。第一个是链接编辑器(静态链接),可以和其它的可重定位和共享目标文件来创建其它的object。第二个是动态链接器,联合一个可执行文件和其它的共享目标文件来创建一个进程映象。
2.3ELF文件作用
ELF文件参与程序链接(建立一个程序)和程序的执行(运行一个文件)。
- 如果用于编译和链接(可重定位文件),则编译器和链接器将把elf文件看作是节头表描述的节的集合,程序头表可选。
- 如果用于加载执行(可执行文件),则加载器则将把elf文件看作是程序头表描述的段的集合,一个段可能包含多个节,节头表可选。
- 如果是共享文件,则两者都含有。