当我们在linux bash下执行ELF程序时,Linux系统是怎样装载和执行的呢?
1.bash进程fork出子进程
2.在bash的子进程中调用execve系统调用来执行指定的ELF。
3.execve系统调用的入口是sys_execve,在sys_execve会调用do_execve
4.在do_execve中会读取可执行文件的前128个字节。这128个字节用来判断可执行文件是哪种类型。
5.do_execve读取了128个字节的文件头后,调用serch_binary_handle去搜索匹配合适的可执行文件装载处理过程。search_binary_handle会通过判断文件头部的魔数确定文件的格式。ELF的装载处理过程是load_elf_binary.
6.在load_elf_binary中,检查文件格式的有效性后,寻找动态链接的.interp 段。根据ELF可执行文件的program headers,建立可执行文件和虚拟内存的映射。将execev系统调用的返回地址改成ELF可执行文件的入口地址。当execev返回时就可执行ELF文件。
时间: 2024-12-13 09:02:30