ELF学习笔记

目标文件有三种形式:
1.可重定位目标文件,由编译器产生
2.可执行目标文件,二进制代码和数据,可以直接拷贝到内存中执行,由链接器产生
3.共享目标文件,特殊的可重定位目标文件,可在运行时进行链接

根据目标文件形式的不同,对elf的解读不同

ELF学习笔记_第1张图片
ObjFileFmt.epsi.gif

1.对于可重定位文件,由ELF header和sections组成,各个section在文件中的位置由Section Header Table来指定。
2.可执行目标文件和共享目标文件由segments和ELF header组成,segment由sections组成,方便在运行时成块的加载如虚拟内存空间

可重定位目标文件##

编译器在编译时会将不同可重定位文件的data和text section进行合并,并分配虚拟内存地址,同时将重定位section中entry分配实际的地址。如果有使用动态链接库,那么?

可执行目标文件##

如果有使用动态链接库,会在加载数据和代码segment之后读取interpret segment里的dynamic linker(本身也是so,通常为ld.so),将执行转交给dynamic linker,dynamic linker会根据dynamic节中的needed entry将依赖so都加载到虚拟地址空间中,并进行符号重定向。

你可能感兴趣的:(ELF学习笔记)