当前线程执行的共享对象文件路径

时间:2013-02-28 09:54:31

标签: linux shared-libraries

有没有办法获取当前由线程执行的.so的文件路径/文件名?该程序是用c ++编写的,可以在64位Linux 3.0机器上运行。

2 个答案:

答案 0 :(得分:1)

您可以按顺序读取(从进程内部)文件/proc/self/maps以获取当前进程的内存映射(包括共享对象的内存映射)。

然后你可以得到你的程序计数器(或调用程序的计数器)并找到它所在的段。可能backtraceGCC builtin_return_address是相关的。

您也可以使用dladdr功能。

请参阅proc(5)backtrace(3)dladdr(3)手册页以及this answer

附加物

在信号处理程序中,您可以使用sigaction(2) SA_SIGINFO发送信号时获取程序计数器。 sa_sigaction函数指针获取ucontext_t,您可以从中获取程序计数器寄存器(使用机器相关的C代码)。然后你可以处理它。

我建议详细研究GCC正在做什么

答案 1 :(得分:0)

我认为最接近的是获取进程加载的所有共享库的列表。您可以使用pmaplsof

来执行此操作