有没有办法获取当前由线程执行的.so的文件路径/文件名?该程序是用c ++编写的,可以在64位Linux 3.0机器上运行。
答案 0 :(得分:1)
您可以按顺序读取(从进程内部)文件/proc/self/maps
以获取当前进程的内存映射(包括共享对象的内存映射)。
然后你可以得到你的程序计数器(或调用程序的计数器)并找到它所在的段。可能backtrace
或GCC builtin_return_address是相关的。
您也可以使用dladdr
功能。
请参阅proc(5),backtrace(3),dladdr(3)手册页以及this answer。
在信号处理程序中,您可以使用sigaction(2) SA_SIGINFO
发送信号时获取程序计数器。 sa_sigaction
函数指针获取ucontext_t
,您可以从中获取程序计数器寄存器(使用机器相关的C代码)。然后你可以处理它。
我建议详细研究GCC正在做什么
答案 1 :(得分:0)
我认为最接近的是获取进程加载的所有共享库的列表。您可以使用pmap
或lsof
。