有没有办法获取当前正在由线程执行的 .so 的文件路径/文件名?该程序是用 C++ 编写的,在 64 位 Linux 3.0 机器上运行。
问问题
1805 次
2 回答
1
您可以顺序读取(从您的进程内部)文件/proc/self/maps
以获取当前进程的内存映射(包括共享对象的映射)。
然后你可以得到你的程序计数器(或调用者的程序计数器)并找到它在哪个段中。也许backtrace
或GCC builtin_return_address是相关的。
您也可以使用该dladdr
功能。
请参阅proc(5)、backtrace(3)、dladdr(3)手册页以及此答案。
附加物
当使用sigaction(2) with发送信号时,您可以从信号处理程序获取程序计数器SA_SIGINFO
。sa_sigaction
函数指针获得一个,ucontext_t
您可以从中获得程序计数器寄存器(使用机器相关的 C 代码)。那你就可以处理了。
我建议详细了解 GCC 正在做什么
于 2013-02-28T09:58:43.807 回答
0
我认为关闭的事情是获取您的进程加载的所有共享库的列表。您可以使用pmap
或来做到这一点lsof
。
于 2013-02-28T09:59:38.387 回答