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

C 从库中的函数获取共享库名称,c,linux,shared-libraries,C,Linux,Shared Libraries,在linux中,有没有一种方法可以从它的一个函数(或链接到它的任何静态库函数)获取共享库名称 基本上,您想检查当前是否有类似于进程可用的program\u invocation\u short\u name/program\u invocation\u name的API/变量。如果您想知道是否有名为“foo”的动态符号,请使用查找此类符号的地址,或NULL如果没有此类动态符号 不过,我不知道你为什么会关心共享库的名称 当您有一个符号的地址时,您总是可以读取该伪文件以找出该符号来自哪个二进制文件。

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


基本上,您想检查当前是否有类似于进程可用的
program\u invocation\u short\u name/program\u invocation\u name
的API/变量。

如果您想知道是否有名为
“foo”
的动态符号,请使用查找此类符号的地址,或
NULL
如果没有此类动态符号

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


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

如果您想知道是否有名为
“foo”
的动态符号,请使用查找此类符号的地址,如果没有此类动态符号,请使用
NULL

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


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

原因是我想记录加载库的列表以及加载过程中加载库的持续时间。看起来我应该使用/proc来管理filesystem@MSK:为此,您可能应该查看函数。除了应用程序通过
dlopen()
加载的库和通过
dlclose()
关闭的库之外,Duration几乎总是进程的生命周期。要检测这些,我建议通过
ltrace-e dlopen./program…
运行该进程。通常,要找出进程访问哪些文件,请使用
strace-e trace=open./program…
ldd./program
将告诉您在运行
main()
之前将加载哪些动态库。原因是我想记录加载库的列表以及加载过程中加载库的持续时间。看起来我应该使用/proc来管理filesystem@MSK:为此,您可能应该查看函数。除了应用程序通过
dlopen()
加载的库和通过
dlclose()
关闭的库之外,Duration几乎总是进程的生命周期。要检测这些,我建议通过
ltrace-e dlopen./program…
运行该进程。通常,要找出进程访问哪些文件,请使用
strace-e trace=open./program…
ldd./program
将告诉您在运行
main()
之前将加载哪些动态库。