gpt4 book ai didi

c++ - ELF 文件中的 resolve 函数如何知道符号在哪些库中?

转载 作者:行者123 更新时间:2023-11-28 07:44:12 27 4
gpt4 key购买 nike

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

    typedef struct {        Elf32_Word  st_name;        Elf32_Addr  st_value;        Elf32_Word  st_size;        unsigned char   st_info;    /* bind, type: ELF_32_ST_... */        unsigned char   st_other;        Elf32_Half  st_shndx;   /* SHN_... */    } Elf32_Sym;

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

最佳答案

how does the resolving function find the lib of a symbol

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

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

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

关于c++ - ELF 文件中的 resolve 函数如何知道符号在哪些库中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15190185/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com