你的位置:首页 > 操作系统

[操作系统]了解动态链接(五)—— 动态符号表


动态符号表 (.dynsym) 用来保存与动态链接相关的导入导出符号,不包括模块内部的符号。而 .symtab 保存所有符号,包括 .dynsym 中的符号。

动态符号表中所包含的符号的符号名保存在动态符号字符串表 .dynstr 中。

使用 readelf 查看 .dynsym 表,如:readelf --dyn-syms libstdc++.so。

 

可以看到,.dynsym 表包含39项。__cxa_atexit 是一个导入符号,而 __cxa_guard_acquire 则是一个导出符号。搜索 libstdc++ 库的源码,能找到该导出函数的定义:

 

在 android 的 linker 进行符号查找和重定位工作时,使用的是 .symtab 和 .hash,.hash 的作用是加快符号查找。.dynsym 在 android linker 中并未使用到。

 

学习资料: 《程序员的自我修养——链接、装载和库》