为什么有两个符号表?

逆向工程 linux 小精灵
2021-06-18 10:35:19

如果.symtab已经包含了所有内容,为什么还要有两个符号表.dynsym

1个回答

简短的回答是.dynsym动态链接器(也称为运行时加载器或 RTLD)在程序加载时使用表来确定将哪些 DLL 映射到正在加载到内存中的程序的地址空间。结果,该.dynsym 部分被映射到可加载(具体而言,该text段)并因此在内核加载程序段时包含在虚拟内存中的运行时进程映像中。作为这一点的反映,Sys V ABI 实际上要求动态链接数组包含动态符号哈希表、符号和库名称的字符串表以及动态符号表。

另一方面,.symtab进程创建不需要段,它没有映射到可加载段,因此在程序执行时不会加载到内存中,因此可以与段信息一起删除。

以下文章更详细地讨论了动态链接及其要求:

有关更多信息,请参阅 Sys V ABI 的第 5 章 -“程序加载和动态链接”,以及 LWN 文章程序如何运行:ELF 二进制文件