0

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

4

2 回答 2

1

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

然后你可以得到你的程序计数器(或调用者的程序计数器)并找到它在哪个段中。也许backtraceGCC builtin_return_address是相关的。

您也可以使用该dladdr功能。

请参阅proc(5)backtrace(3)dladdr(3)手册页以及此答案

附加物

当使用sigaction(2) with发送信号时,您可以从信号处理程序获取程序计数器SA_SIGINFOsa_sigaction函数指针获得一个,ucontext_t您可以从中获得程序计数器寄存器(使用机器相关的 C 代码)。那你就可以处理了。

我建议详细了解 GCC 正在做什么

于 2013-02-28T09:58:43.807 回答
0

我认为关闭的事情是获取您的进程加载的所有共享库的列表。您可以使用pmap或来做到这一点lsof

于 2013-02-28T09:59:38.387 回答