与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没有帮助。
答案 0 :(得分:2)
使用dladdr
。文档here。
答案 1 :(得分:0)
不本身,不;如果符号是在编译而不是通过dlopen()
/ dlsym()
访问的,那么就没有要返回的句柄。 (句柄抽象仅用于使dlsym()
能够精确控制其加载符号的位置;除了通过链接描述文件之外,对原始链接没有这样的控制。)在正常的事件过程中,对象只是{ {1}} ed和open()
ed,其他详细信息隐藏在mmap()
中,只能通过ld.so
和RTLD_DEFAULT
参数间接访问RTLD_NEXT
。如果您使用dlsym()
,则需要跟踪您的句柄。
答案 2 :(得分:0)
我所知道的唯一方法是解析/proc/self/maps
(和/或可能smaps
)的内容,然后使用符号地址从映射的{{1}的边界进行计算}(开始及其大小)函数所在的映射模块。
注意:.so
是当前进程(包含ID /proc/self
)元信息的符号链接(在Linux上),即<pid>
。
可能有一些编程接口可以使用这些信息。
编辑:啊,所以/proc/<pid>
就是那个界面。