0. 简介
在Linux系统的可执行文件(ELF文件)中,开头是一个文件头,用来描述程序的布局,整个文件的属性等信息,包括文件是否可执行、静态还是动态链接及入口地址等信息;如下图所示:

程序文件中包含了程序头,程序的入口地址等信息不需要写死,调用代码可以通用,根据实际情况加载;此时的文件不是纯碎的二进制可执行文件了,因为包含的程序头不是可执行代码;将这种包含程序头的文件读入到内存后,从程序头中读取入口地址,跳转到入口地址执行;
0.1 文件格式
Linux环境中,目标文件是源代码编译后未链接的中间文件,如:gcc编译生成的.o文件;可执行文件(.o)、动态链接库(.so)、静态链接库(.a)文件都是按照ELF可执行文件格式存储的;
ELF指:Executable and Linkable Format,可执行链接格式;本文中的目标文件指各种类型符合ELF规范的我呢见,如:二进制可执行文件、Linux下的.o目标文件和.so动态库文件;
可执行文件(Executable file):经过编译链接后,可以直接执行的程序文件,如:ELF文件;
共享目标文件(Shared object file):动态链接库,在可执行文件被加载的过程中动态链接,成为程序代码的一部分;
可重定位文件(Relocatable file):可重定位文件即目标文件和静态库文件,是源文件编译后但未完成链接的半成品,被用于与其他目标文