与 Win32 相同:
GetModuleHandleEx(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS, (LPCTSTR)(void*)(myFunc), &h);
http://www.kernel.org/doc/man-pages/online/pages/man3/dlsym.3.html没有帮助。
与 Win32 相同:
GetModuleHandleEx(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS, (LPCTSTR)(void*)(myFunc), &h);
http://www.kernel.org/doc/man-pages/online/pages/man3/dlsym.3.html没有帮助。
使用dladdr
. 文档在这里。
本身不是,不;如果符号被编译而不是通过dlopen()
/访问dlsym()
,则没有要返回的句柄。(句柄抽象的存在只是为了dlsym()
对它从何处加载符号进行精细控制;除了通过链接器脚本外,对原始链接没有这种控制。)在事件的正常过程中,对象只是简单地open()
编辑和mmap()
编辑,其他细节隐藏在ld.so
其中,只能通过RTLD_DEFAULT
和RTLD_NEXT
参数间接访问dlsym()
。如果您正在使用dlopen()
,则需要跟踪您的句柄。
我知道的唯一方法是解析/proc/self/maps
(和/或也许smaps
)的内容,然后使用符号地址从映射的边界.so
(开始及其大小)计算函数所在的映射模块。
注意:/proc/self
是当前进程(带有 ID <pid>
)元信息的符号链接(在 Linux 上),即/proc/<pid>
.
您可以使用这些信息的一些编程接口。
编辑:啊,dladdr()
那个界面也是如此。