2021-2022-1 20212804《Linux内核原理与分析》第八周作业
2021/11/9 7:10:55
本文主要是介绍2021-2022-1 20212804《Linux内核原理与分析》第八周作业,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
Linux内核的实质和Linux系统的一般执行过程
一、知识积累
ELF文件格式
ELF (Executable and Linkable Format)即可执行的和可链接的格式,是一个目标文件格式的标准。ELF格式的文件用于存储Linux程序。ELF是一种对象文件的格式,用于定义不同类型的对象文件中都有什么内容、以什么样的格式放这些内容。ELF首部会描绘整个文件的组织结构,它还包括很多节(sections,是在ELF文件里用以装载内容数据的最小容器),这些节有些是系统定义好的,有些是用户在文件中通过。section命令自定义的,链接器会将多个输入目标文件中相同的节合并。
3种类型:
(1)可重定位文件:一般是中间文件,还需要继续处理。由汇编器和编译器创建,一个源代码文件会生成一个可重定位文件。文件中保存着代码和适当的数据,用来和其他的目标文件一起来创建一个可执行文件、静态库文件或者共享目标文件(即动态库文件)。
(2)可执行文件:一般由多个可重定位文件结合生成,是完成了所有重定位工作和符号解析(除了运行时解析的共享库符号)的文件,文件中保存着一个用来执行的程序。
(3)共享目标文件:共享库,是指可以被可执行文件或其他库文件使用的目标文件,例如标准C的库文件libc.so。可以简单理解为没有主函数main的“可执行”文件,只有一堆函数可供其他可执行文件调用。
两种加载的方法
静态库:直接执行可执行程序的入口。
动态库:由ld来动态链接这个程序,再把控制权交给可执行程序的入口。
二、实验-Linux 内核如何装载和启动一个可执行程序
1、跟踪分析一个execve系统调用内核处理函数
cd ~/LinuxKernel rm menu -rf git clone https://github.com/mengning/menu.git cd menu mv test_exec.c test.c make rootfs
cd .. qemu -kernel linux-3.18.6/arch/x86/boot/bzImage -initrd rootfs.img -S -s
打开一个新shell,调试
gdb file linux-3.18.6/vmlinux target remote:1234 b sys_execve b load_elf_binary c
退出调试之后,查看elf文件头
readelf -h hello
三、总结
可执行文件开始执行的起点在修改调用execve 系统调用时压入内核堆栈的EIP寄存器的值,因为此时标志着当前进程的可执行文件已经被完全替换为新的可执行文件了,但实际开始执行可执行文件中的指令还需要等到执行可执行文件中定义的入口地址的位置,一般地址为0x8048xx的位置。通过修改内核堆栈中EIP寄存器的值作为新程序的起点,让execve系统调用返回到用户态时执行新程序。
这篇关于2021-2022-1 20212804《Linux内核原理与分析》第八周作业的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-12如何创建可引导的 ESXi USB 安装介质 (macOS, Linux, Windows)
- 2024-11-08linux的 vi编辑器中搜索关键字有哪些常用的命令和技巧?-icode9专业技术文章分享
- 2024-11-08在 Linux 的 vi 或 vim 编辑器中什么命令可以直接跳到文件的结尾?-icode9专业技术文章分享
- 2024-10-22原生鸿蒙操作系统HarmonyOS NEXT(HarmonyOS 5)正式发布
- 2024-10-18操作系统入门教程:新手必看的基本操作指南
- 2024-10-18初学者必看:操作系统入门全攻略
- 2024-10-17操作系统入门教程:轻松掌握操作系统基础知识
- 2024-09-11Linux部署Scrapy学习:入门级指南
- 2024-09-11Linux部署Scrapy:入门级指南
- 2024-08-21【Linux】分区向左扩容的方法