我有一个可以加载插件的工作程序dlopen
。
新要求:在代码中的某个点,给了我一个指针,我需要测试这个指针是指向代码还是插件的静态数据。
bool is_pointer_into_plugin(void *p, void *handle);
同样,我需要检索指针指向的插件(如果有)。我还需要知道指针是否指向主程序的代码或静态数据(理想情况下,区分只读和读写区域)。
void *handle plugin_containing_pointer(void *p);
同样,我需要能够检索插件映射的范围(地址和大小)。我还需要主程序的这些信息。
我怎样才能实现is_pointer_into_plugin
, 或plugin_containing_pointer
, 或等效的东西?
dlopen
如有必要,我可以将呼叫更改为。查找应该尽可能快,加载时代码不需要很快。在单独的进程中运行插件并通过共享内存进行通信不是一种选择。
我的程序在 Linux(和 Windows,但这是另一个问题)下运行。未来对其他 unix 系统(至少对 OSX)的可移植性将是一个加分项。