0

在符号表中只有符号名称的偏移量,但没有关于该符号属于哪个库的信息。

    类型定义结构{
        Elf32_Word st_name;
        Elf32_Addr st_value;
        Elf32_Word st_size;
        无符号字符 st_info;/* 绑定,类型:ELF_32_ST_... */
        无符号字符 st_other;
        Elf32_Half st_shndx; /* SHN_... */
    } Elf32_Sym;

在运行时调用解析函数时,会将符号表的偏移量和另一个 DWORD 传递给它。该 DWORD 是否与符号的库有关?如果不是,那么解析函数如何找到符号的库?

4

1 回答 1

1

解析函数如何找到符号的库

通过线性搜索加载到进程中的库(由加载器维护)。

第一个定义给定函数“wins”的库。这允许例如libtcmalloc.so定义malloc,calloc等并覆盖这些符号(您可以使用LD_PRELOAD, 或链接libtcmallocbefore libc,因此之前会libtcmalloc出现在加载器列表libc中)。

搜索在库的数量上是线性的,但O(1)在每个库内部,因为每个库都有其符号的哈希表(在.hashor.gnu_hash部分)。

于 2013-03-04T01:55:41.590 回答