一、Linux下装载ELF可执行文件的过程
1、创建子进程内核创建task_struct数据结构,继承父进程的虚拟地址空间(Virtual Memory Space,VMS)。
2、调用execve()系统调用执行指定的ELF文件
(1)调用内核态函数sys_execve(),动态申请一个linux_binprm数据结构,并用ELF可执行文件的数据填充这个结构;
(2)调用prepare_binprm()函数用位于inode中的数据填充linux_binprm数据结构;
(3)调用search_binary_handler()函数遍历formats链表依次应用其load_binary的方法。对于ELF文件会找到elf_format节点,调用load_elf_binary()函数进行如下工作:
1)检查存放在文件前128字节中的魔数以确认可执行格式及其有效性;
2) 读取可执行文件的首部;