动态符号表 (.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 中并未使用到。
学习资料: 《程序员的自我修养——链接、装载和库》
时间: 2024-09-27 23:37:57