首页 文章

从库中的函数获取共享库名称

提问于
浏览 1248
0

在linux中,有没有办法从其中一个函数(或从链接到它的任何静态库函数)获取共享库名称 .

基本上,想要检查是否存在类似于当前可用于进程的 program_invocation_short_name/program_invocation_name 的API /变量 .

1 回答

  • 2

    如果您想知道是否存在名为 "foo" 的动态符号,请使用dlsym(RTLD_DEFAULT, "foo")查找此符号的地址,如果没有此类动态符号,则使用 NULL .

    不过,我不知道为什么你会关心共享库的名字 .

    当您拥有符号的地址时,您始终可以读取/proc/self/maps伪文件以找出符号来自哪个二进制文件 . (如果符号在 r-- 映射中,它是一个不可变的符号,例如字符串文字 . 如果它在 r-x 映射中,它在代码中,可能是一个函数 . 如果它在 rw- 映射中,它是一个全局变量 . )请注意,因为它是伪文件,它是内核二进制接口的一部分,并且从未本地化 .

相关问题