永发信息网

如何使用linux dladdr

答案:2  悬赏:10  手机版
解决时间 2021-02-22 22:08
  • 提问者网友:记得曾经
  • 2021-02-21 22:31
如何使用linux dladdr
最佳答案
  • 五星知识达人网友:孤独的牧羊人
  • 2021-02-21 23:16
在linux里面,每当某进程中调用dlopen打开动态连接库的同时,都会相应的维护该进程的一个link,加入新载入的这个动态库的名称在进程内的地址空间等基本信息,然后更新symbol。因此,只要遍历这个link,得知查找的address是在哪一个item的地址范围内,就可以找到该动态库的名称,然后减去进程载入的起始地址就得到了在动态库内的相对地址了,这也就是dladdr的原理。
尽管工作中遇到的OS不是linux,但是glibc的实现也是类似的。而且由于是嵌入式上跑的,反而更加简单。link的首地址竟然是保存在ld.so的一个固定的变量里,而且这个link也是一个专门用于记录动态库信息的结构,也比linux下的大杂烩要简单很多:)所以对我的问题就更方便了,直接用ptrace去attach目标进程,peek到保存link首地址的数据,然后逐个查询~~~如此,不用再麻烦remote debug啦,找到相对地址后我直接gdb里用info line,
全部回答
  • 1楼网友:夜余生
  • 2021-02-22 00:14
你可以改成这样 serv_addr.sin_addr.s_addr= inet_addr(ip地址);
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯