gpt4 book ai didi

c - 如何知道运行时链接的共享对象的内存分配大小?

转载 作者:太空宇宙 更新时间:2023-11-04 04:23:10 26 4
gpt4 key购买 nike

在将共享库 (.so) 与 dlopen 链接后,我们如何知道链接的共享对象的大小,即从 dlopen 返回的句柄的偏移量是分配的共享库。

最佳答案

共享库的动态链接是一个完整的用户空间过程。您可以自己完成:解析文件的 ELF header ,将文件 mmap 到内存中,使用共享库的 undefined symbol 进行动态链接等 pp。然后您就知道库部分的确切位置。但是 GNU libdl 没有提供任何相关信息。

另一种选择是 dlopen() 库并为它解析/proc/self/maps。它通常有几个具有不同访问权限(代码、rodata、rwdata 等)的映射,具体取决于像这样的 elf header :

7fd6298f0000-7fd6298f5000 r-xp 00000000 fd:00 393441 /lib/x86_64-linux-gnu/libnss_dns-2.19.so
7fd6298f5000-7fd629af4000 ---p 00005000 fd:00 393441 /lib/x86_64-linux-gnu/libnss_dns-2.19.so
7fd629af4000-7fd629af5000 r--p 00004000 fd:00 393441 /lib/x86_64-linux-gnu/libnss_dns-2.19.so
7fd629af5000-7fd629af6000 rw-p 00005000 fd:00 393441 /lib/x86_64-linux-gnu/libnss_dns-2.19.so

这应该提供您需要的所有信息。

关于c - 如何知道运行时链接的共享对象的内存分配大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44291485/

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