符号表
符号是表示每个ELF文件的一个重要部分,因为它保存了程序实现或使用的所有(全局)变量和函数。如果程序引用了一个自身代码未定义的符号,则称之为未定义的符号(例如一般程序中printf函数,就定义在c标准函数中)。此类引用必须在静态链接期间用其他目标模块或者库解决,或在加载期间通过动态链接(使用ld-linux.so)解决。nm工具可以生成程序定义和使用的所有符合列表。
符号表保存了查找程序符号、为符号赋值、重定位符号所需的全部信息。
符号的主要任务是讲一个字符串和一个值关联起来。例如,printf符号表示printf函数在虚拟地址空间中的地址,该函数的机器代码就存在于该地址。符号也可能有绝对值,由程序解释,例如数值常数。
以32为为例,
数据结构
/* Symbol table entry. */
typedef struct
{