与 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()那个界面也是如此。