gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 23:03:23 26 4
gpt4 key购买 nike

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 * .

    关于c - dladdr() 输出参数的内存语义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64160245/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com