ELF(Executable and Linking Format)是一个定义了目标文件内部信息如何组成和组织的文件格式。
内核会根据这些信息加载可执行文件,内核根据这些信息可以知道从文件哪里获取代码,从哪里获取初始化数据,在哪里应该加载共享库等信息。
栈的地址是向下生长,堆的地址是向上生长:
1、ELF 文件类型
ELF 文件有下面三种类型:
1)目标文件
$ gcc -c test.c
得到的test.o就是目标文件,目标文件通过链接可生成可执行文件。
静态库其实也算目标文件,静态库是通过ar命令将目标打包为.a文件。
如:ar crv libtest.a test.o
2)可执行文件
$gcc -o test test.c
得到的 test 文件就是可执行的二进制文件。
3)共享库
$ gcc test.c -fPIC -shared -o libtest.so
得到的文件 listtest.so 就是共享库。<