dladdr() out 参数的内存语义

Memory semantics of dladdr() out parameter

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,但我怀疑它确实指向一个常量字符串(符号本身)。

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

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

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