在共享库的构造函数(_init部分)中,如何知道什么函数被中断了?
In shared library's constructor (_init section), how to know what function is interrupted?
在x86 linux上,进程a .exe调用dlopen()来加载共享库B.so。在B.so中,有一个构造函数,它想知道进程A.exe中哪个函数在调用dlopen()之前被中断。
构造函数(_init section)如何在B.so中知道?
如果我正确理解您的问题("中断"可能会误导),您的应用程序A有几个可能调用dlopen()的位置,并且您想知道从这些位置中的哪个位置调用您。
首先,这听起来不对劲,因为共享库不应该对谁在加载它做出任何假设。如果是这样,你可以不要在Valgrind中运行你的应用程序,因为在这种情况下,Valgrind会做加载而不是标准的动态链接器,你的结果可能会被打乱。
第二,如果你真的需要这样做(为什么?),那么你可能会在构造函数中进行反向跟踪。然后向上搜索,直到找到dlopen(),在下一个更高的堆栈帧上,您将找到调用dlopen的函数。编辑:要将堆栈跟踪中的地址映射回函数,您将需要相关二进制文件的调试信息或任何其他方法来将函数地址映射到符号名。
相关文章:
- 努力将整数转换为链表。不知道我在这里做错了什么
- 这个指针和内存代码打印是什么?我不知道是打印垃圾还是如何打印我需要的值
- 我不知道这条线是做什么的
- 有谁知道这段代码有什么问题?
- CMake 的导出如何知道目标版本是什么?
- 终端(bash)如何知道引发了什么异常
- 由于某种原因,我的代码中出现了 [json.exception.type_error.302]。我知道错误意味着什么,但我不知道哪里有故障
- 这些情况有什么区别?我怎么知道什么是临时对象?
- 必须具有泛型接口的函数,但必须根据传递的子类(不知道它们是什么!)以不同的行为 - C++
- *(flow + i*n + j) 在 C 中是什么意思?我不知道这个话题叫什么
- 我不知道这是什么意思 (x^y) ?在 C++ 中
- 我不知道这个C 一线会做什么
- 当我打印字符串时,我不知道它是什么输出
- 调用方法时C cout.不知道我在做什么错
- 让对象知道它创建的 show 函数中发生了什么
- 我想知道下面的指针等同于做什么
- 我不断收到分段错误,但不知道是什么原因造成的
- C++:无论如何,有什么可以知道是什么触发了 If 语句
- 这个语句到底是什么意思 stack<int, list<int> > 它与 stack 有何不同<int>?
- C++98 中获取并继续调用当前类不知道的类方法的最简单方法是什么?