dlopen(NULL,RTLD_LAZY)的问题

qiujian5628 2010-08-13 01:06:41
我在某个模块内,想通过函数名获取这个模块的函数地址:
dlopen(NULL,RTLD_LAZY)开main主程序,
然后dlsym()即可。
但我的问题就是dlopen(NULL,RTLD_LAZY)这里返回的到底是哪个模块?
比如我这个模块是.so,是返回这个.so呢,还是逐级返回到最终的main函数模块内?
问题最终描述为:我在一个.so动态库中,想感觉函数名,查找.so模块内的函数地址,通过dlopen(NULL,RTLD_LAZY)的方式能返回这个.so的句柄吗?

如果不可以的话,我只能通过map<函数名,函数指针>的形式查找实现了
...全文
1183 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
ljhnew 2010-08-13
  • 打赏
  • 举报
回复
晕菜,你提问的问题究竟想问啥,那么多错字。要深入了解dlopen和dlsym,可以在系统中用man查看详细说明。
void * dlopen(const char *pathname, int mode);
返回你load的pathname模块句柄。如dlopen("/lib/libmy.so",RTLD_LAZY)。返回对象/lib/libmy.so的句柄。
如果你把pathname输入为NULL,则返回的是一个全局的对象表,包括你在load前的进程镜像表。这种方式很少用。

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧