gpt4 book ai didi

c++ - 在共享库的构造函数(_init 部分)中,如何知道哪个函数被中断了?

转载 作者:行者123 更新时间:2023-11-28 08:18:31 26 4
gpt4 key购买 nike

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

B.so中的构造函数(_init段)怎么知道?

最佳答案

如果我正确理解您的问题(“中断”可能会产生误导),您的应用程序 A 有多个位置可能会调用 dlopen() 并且您想知道从这些位置中的哪些位置调用了您。

首先,这听起来不对,因为共享库不应该对谁在加载它做出任何假设。如果是这样,您可以不在 Valgrind 中运行您的应用程序,因为在这种情况下,Valgrind 将执行加载而不是标准动态链接器,您的结果可能会出错。

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

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

关于c++ - 在共享库的构造函数(_init 部分)中,如何知道哪个函数被中断了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6770034/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com