问题描述
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
,但是我怀疑确实指向常量字符串(符号本身)。
解决方法
这些字符串有效,直到通过dlclose
(直接或间接)卸载对象为止。
const char *
表示dladdr
调用者不得释放该字符串,因为free
需要void *
,而不是const void *
。