前面介绍了elf文件的两种视图,以及两种视图的各自几个组成部分:
elf文件有两种视图,链接视图和执行视图。在链接视图里,elf文件被划分成了elf 头、节头表、若干的节(section);在执行视图里,elf文件被划分成了elf头、程序头表、段(segment)。
可以看到,段实际上包含了若干个节,执行视图是给程序启动用的,用于指示如何加载程序;而链接视图是连接时使用的,用于指示链接器如何链接文件。
节头表就是一个表,可以理解成一个结构体数组,每一项用于描述一个节。每个我们今天来看下其中的一个节【符号表】。
今天我们关注 .symtab 和 .dynsym这两个节。
动态符号表 (.dynsym) 用来保存与动态链接相关的导入导出符号,不包括模块内部的符号。
而 .symtab 则保存所有符号,包括 .dynsym 中的符号。
符号的概念
什么是符号?我们将函数和全局变量(static局部变量也算&