2020-2021-1 202029325 《Linux内核原理与分析》第八周作业
|这个作业属于哪个课程|<2020-2021-1Linux内核原理与分析)>|
:-: | :-: | :-:
|这个作业要求在哪里|<2020-2021-1Linux内核原理与分析第八周作业>|
|这个作业的目标|<学习Linux内核如何装载和启动一个可执行程序>| :-: | :-: | :-:
|作业正文|<2020-2021-1 202029325 《Linux内核原理与分析》第八周作业>|
一、实验过程
1.更新linux/kernel下的menu,并将exec添加进MenuOs中
代码如下:
rm -rf menu
git clone https://github.com/mengning/menu.git
qemu -kernel ../linux-3.18.6/arch/x86/boot/bzImage -initrd rootfs.img -S -s
cd menu
mv test_exec.c test.c
make rootfs
启动MenusOS运行效果如下图:
2.进入gdb设置断点
使用水平分割,再开启一个shell窗口,启动gdb,把内核加载进来,连接到target remote 1234,代码如下,在sys_exec、load_elf_binary、start_thread处设置断点
file linux-3.18.6/vmlinux
target remote:1234
//设置断点
b sys_exec
b load_elf_binary
b start_thread
会出现找不到文件的错误:linux-3.18.6/vmlinux: No such file or directory.
改正代码:
file ../linux-3.18.6/vmlinux
target remote:1234
//设置断点
b sys_exec
b load_elf_binary
b start_thread
成功找到文件:
设置断点如下图:
3.调试
调试过程如下图:
最后在qemu中输入exec
停止
4.查看hello的EIF头部readelf -h hello
看图可知,入口点地址是0x8049be0,和new_ip是一样的,程序头起点是52bytes
二、实验总结
ELF(Executable and Linkable Format)即可执行的和可链接的格式,是一个目标文件格式的标准,即ELF是一种标准!!!ELF格式的文件用于存储Linux程序。ELF是一种对象文件的格式,用于定义不同类型的对象文件中都有什么内容,以什么样的格式放这些内容。
ELF文件有3种类型,第一种是可重定位文件,一般是中间文件,由编译器和汇编器创建,一个源代码文件会生成一个可重定位文件。例如编译.c文件时会生成.o文件,该文件即为可重定位目标文件。第二种是可执行文件,一般由多个可重定位文件结合生成,是完成了所有重定位工作和符号解析(除了运行时解析的共享库符号)的文件。第三种是共享目标文件,指可以被可执行文件或其他库文件使用的目标文件。linux下就是后缀为.so的文件。
ELF文件格式如下图: