【发布时间】:2015-01-06 19:20:21
【问题描述】:
假设您有一个使用 dlopen() 加载多个共享对象/动态库的程序。给定一个指向全局对象(例如静态成员变量)的指针,是否可以确定该指针分配在哪个库的边界?
【问题讨论】:
-
使用调试器单步调试程序并观察哪个代码分配了它?
-
我能想到的唯一方法是确保每个库都使用不同的分配器(malloc & free)。如果您可以访问符号表(dlopen 让您拥有它)并且知道它的结构,您可能可以修补导入的 malloc 符号以指向专用函数。
-
@sashoalm 问题被标记为 linux
-
但是如果库使用非常规的分配器,那就更难了。但是,它可以帮助您区分其分配。
-
@didierc dlopen 等让符号和指针来回解析。但是当你必须从两者都开始的时候,你能不能把所有的指针都枚举出来,一一检查呢?重载 malloc 和 free 似乎是一个实用的想法,但让我们把它作为最后的手段。
标签: c++ c linux shared-objects dynamic-library