ELF文件跟编译链接息息相关,但是具体他的内容是什么呢?本文介绍的是ELF文件文件的格式。
格式就是按照一定的规则组织起来的,所以凡是有格式,那么只要相应的软件按照格式去解析他,就能展示出可读信息,以下是一些相关的命令(程序):
比如用readelf 是linux下查看elf文件格式的命令,直接输入readelf可以看帮助文档,不同的参数展示不同的内容。
比如用file 命令来看具体属于什么格式的文件,读取的就是文件头。
比如用nm 查看 .a 中的目标文件有哪些,符号有哪些。
还有objdump。
首先介绍的是文件头(文件头很好理解,就是一个小总结,没有文件头,你就不知道后面的是什么。文件头小而重要。可以更快的找到需要的内容)
然后介绍是段表的内容(段表啊,符号表啊这些也是跟编译链接中的术语)
然后介绍是符号表中的符号
然后介绍编译器对符号的修饰,以及对符号的强弱的区分以及意义,最后介绍elf中的调试信息段。
还有还有。。。。看目录吧
概念比较多文章比较长,建议分词看,一次只看一部分(读者忽略:本次修改 已经看到1)。
看过一遍可能也会忘记,但是看了一遍以后,会对编译链接的过程更加清楚。
目录
2.文件头结构体Elf32_Ehdr——定义在/usr/include/elf.h中
2./usr/include/elf.h中定义的Elf32_Shdr
2./usr/include/elf.h中定义的Elf32_Sym
5.符号的强弱StrongSymbol WeakSymbol
符号表.dynsym段——动态链接下的“符号表”(vs:symtab是保存了所有符号)
.plt段和.plt.got段——每个外部函数在plt中都有对应的一个项
重定位表.rel.dyn段 和 rel.plt段——分别相当于静态链接中的.rel.text和.rel.data
重定位入口类型——对比前文静态链接是的重定位:查看 编译和链接过程(第2章)
1.相关的目标文件 在/usr/lib64 或 /usr/lib下