在共享库构造函数(init部分)中,如何知道哪些函数被中断?

时间:2011-07-21 00:19:48

标签: c++ c linker shared-libraries ld

在x86 linux上,进程A.exe调用dlopen()来加载共享库B.so.在B.so中,有一个构造函数,他想知道在调用dlopen()之前,正在处理的函数A.exe是否被中断。

B.so中的构造函数(_init section)如何知道?

1 个答案:

答案 0 :(得分:1)

如果我正确理解你的问题('打断'可能会产生误导),你的应用程序A有几个位置可能会调用dlopen(),你想知道你调用了哪些位置。

首先,这闻起来有点不对,因为共享库不应该假设谁在加载它。如果是这样,你可以在Valgrind中运行你的应用程序,因为在这种情况下,Valgrind会加载而不是标准的动态链接器,你的结果可能会搞砸。

其次,如果你真的需要这样做(为什么?),那么你可能会在构造函数中进行回溯。然后向上搜索直到找到dlopen(),然后在下一个更高的堆栈帧上找到调用dlopen的函数。

编辑:要将堆栈跟踪中的地址映射回函数,您将需要所涉及二进制文件的调试信息或任何其他方式将函数地址映射到符号名称。