前言
在linux shell命令行启动一个程序时,实际上新启动的进程是作为shell进程的子进程存在的。shell进程会先fork出一个子进程,此时子进程是父进程的一个拷贝,所以其代码段和数据段都来自于父进程,但是子进程是要执行新的程序的,所以会调用execv函数,载入新的程序,此过程中,子进程的代码段,数据段等都会替换成新的进程的。
本文主要是对elf文件的加载过程做一个简要的分析。
linux只支持ELF格式的可以行程序吗?
这个答案肯定是否定的!linux支持的可执行程序格式是通过register_binfmt注册的。elf格式的可执行程序加载器通过register_binfmt(&elf_format);注册。
ELF格式的可执行文件包括哪些内容?
了解ELF格式的可执行文件的加载过程,首先要先知道ELF可执行文件的格式。
ELF文件有一个ELF header,ELF header指明program header和section header的在文件中的位置以及大小;section header指明各个段在文件中的位置以及属性,这些段包括我们熟悉的代码段,数据段,只读数据段等等;program header指明各个segment在文件中的位置和属性,segment是一个或多个section的集合。我写了一个极简的程序,编译成ELF可执行程序,并通过readelf -l命令查看program header信息,如下:
Elf file type is EXEC (Executable file)
Entry po