dladdr() 输出参数的内存语义

Ian*_*ney 5 c dynamic-linking dladdr

的内存语义是什么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;
Run Code Online (Sandbox Code Playgroud)

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

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

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

用户是否负责删除dli_fname返回的内容dladdr()

Flo*_*mer 5

dlclose这些字符串在通过(直接或间接)卸载对象之前一直有效。

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