微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

dladdrout参数的内存语义

如何解决dladdrout参数的内存语义

dladdr()的内存语义是什么?

#define _GNU_SOURCE
#include <dlfcn.h>

int dladdr(void *addr,Dl_info *info);

typedef struct {
    const char *dli_fname;  /* Pathname of shared object that contains address */
    void       *dli_fbase;  /* Base address at which shared object is loaded */
    const char *dli_sname;  /* Name of symbol whose deFinition overlaps addr */
    void       *dli_saddr;  /* Exact address of symbol named in dli_sname */
} Dl_info;

通过阅读手册页,尚不清楚dli_fname

  • 指向常量字符串,不需要释放
  • 指向堆数组,用户负责删除
  • 指向全局数组(可能不是,因为它声称是可重入的)

我想同样的问题也适用于dli_sname,但是我怀疑确实指向常量字符串(符号本身)。

用户负责删除dli_fname返回的dladdr()吗?

解决方法

这些字符串有效,直到通过dlclose(直接或间接)卸载对象为止。

const char *表示dladdr调用者不得释放该字符串,因为free需要void *,而不是const void *

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。