国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > Linux Shell > 正文

Linux動態庫函數的詳解

2020-07-27 18:50:18
字體:
來源:轉載
供稿:網友

Linux動態庫函數的詳解

加載動態庫

void *dlopen(const char *filename, int flag);

flag的可能值:

  •         RTLD_LAZY
  •         RTLD_NOW
  •         RTLD_GLOBAL
  •         RTLD_LOCAL
  •         RTLD_NODELETE (since glibc 2.2)
  •         RTLD_NOLOAD (since glibc 2.2)
  •         RTLD_DEEPBIND

這些flag的具體含義可使用man查看

返回動態庫中最近的一次錯誤

char *dlerror(void);

根據動態庫句柄和函數名稱,返回函數的地址

void *dlsym(void *handle, const char *symbol);

如果使用dlopen(NULL, <flag>)得到句柄,通過這個句柄可以查找所有函數符號,只要那個函數符號所在的dll在加載時指定了RTLD_GLOBAL 

關閉動態庫

int dlclose(void *handle);

根據函數地址,返回函數名稱和其它信息

注意傳入地址只要落在函數代碼空間范圍之內即可,不需要是函數的起始地址

int dladdr(void *addr, Dl_info *info); typedef struct {   const char *dli_fname;/* Filename of defining object */   void *dli_fbase;   /* Load address of that object */   const char *dli_sname;/* Name of nearest lower symbol */   void *dli_saddr;   /* Exact value of nearest symbol */  } Dl_info;

 構造函數和析構函數(這兩個是屬性,而不是函數)

__attribute__((constructor))__attribute__((destructor))

例如:

__attribute__((constructor)) void before_main() {     printf("before main/n"); }  __attribute__((destructor)) void after_main() {   printf("after main/n"); } 

如有疑問請留言或者到本站社區交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 沈丘县| 福泉市| 文安县| 河池市| 若尔盖县| 新河县| 乌鲁木齐县| 健康| 秦安县| 济宁市| 墨玉县| 郓城县| 合阳县| 巴林左旗| 嫩江县| 昌乐县| 肃宁县| 芒康县| 四会市| 磴口县| 砚山县| 潍坊市| 绥阳县| 托克逊县| 许昌县| 广灵县| 崇义县| 乐至县| 阜平县| 巴林右旗| 东海县| 广平县| 玉溪市| 尼勒克县| 乌审旗| 海丰县| 沂南县| 仁布县| 宾川县| 仁布县| 望谟县|