PPswaggy  

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文件看作是程序头表描述的段的集合,一个段可能包含多个节,节头表可选。
 - 如果是共享文件,则两者都含有。
posted on 2020-11-29 11:16  PPswaggy  阅读(97)  评论(0编辑  收藏  举报