第八周
阅读学习教材「庖丁解牛Linux 分析 」第8章,有问题优先使用chatgpt等AI工具。或者到蓝墨云班课中提问,24小时内回复,鼓励解答别人问题,提问前请阅读「如何提问」。
教材深入学习关注豆列「Linux内核及安全」。
学习蓝墨云班课中第八周视频「Linux内核的实质和Linux系统的一般执行过程」,并完成实验楼上配套实验七。,注意从下往上看。基于树莓派或其他平台完成ARM相关内容。
在本周日晚12:00前发学习博客(标题 学号《Linux内核原理与分析》第八周作业),重点是遇到的问题和解决方案内容涵盖教材学习和视频,格式用Markdown。不按时交作业会扣分。
一:ELF概述:
ELF即可执行的和可链接的格式。ELF格式的文件用于存储Linux程序。ELF是一种对象文件的格式,用于定义不同类型的对象文件中都有什么内容、以什么样的格式方这些内容。
ELF文件的3种类型:
1.可重定位文件;在编译Linux内核时,每个内核源代码.c文件都会生成一个同名的.o文件,该文件即为可重定位目标文件,最后所有.o文件会链接为一个文件,即Linux内核
2.可执行文件;一般有多个可重定位文件结合生成。
3.共享目标文件;指可以被可执行文件或其他库文件使用的目标文件。
ELF文件的作用:
ELF文件参与程序的链接和程序的运行
二:Linux内核如何装载和启动一个可执行程序
1.首先打开实验楼,进入LinuxKernel目录下,进入menu目录
然后使用make rootfs
2.查看test.c文件,查看更新后的exec函数,如下图:
输入help,可以发现exec
3.输入以下指令:qemu -kernel linux-3.18.6/arch/x86/boot/bzImage -initrd rootfs.img -S -s,打开qemu界面进入暂停状态:
再次打开一个终端界面,进入LinuxKernel文件夹下,输入gdb,连接vmlinux文件,在sys_execve、load_elf_binary和b start_thread处设置断点
4、查看hello(ELF文件)的头部信息
readelf -h hello
特别关注新的可执行程序是从哪里开始执行的?
execve系统调用启动新可执行程序,首先加载可执行文件,解析其结构,分配内存,设置环境,最后跳转到入口点。无论是静态链接还是动态链接的程序,都经过相似的初始化过程,确保程序能在独立的环境中运行。静态链接程序包含所有代码和数据,而动态链接程序依赖于共享库。这些差异影响内存布局和可执行文件大小,但都不妨碍程序在execve返回后成功执行。