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

时间:2018-12-10 09:44:13

标签: c linux shared-libraries

在linux中,是否有一种方法可以从其函数之一(或从与其链接的任何静态库函数)中获取共享库名称。

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

1 个答案:

答案 0 :(得分:2)

如果您想知道是否存在一个名为"foo"的动态符号,请使用dlsym(RTLD_DEFAULT, "foo")来查找该符号的地址,如果没有这样的动态符号,请使用NULL

不过,我不知道您为什么要关心共享库的名称。

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