欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Linux動(dòng)態(tài)庫(kù)函數(shù)的詳解

 更新時(shí)間:2017年10月31日 15:35:52   作者:walkingman321  
這篇文章主要介紹了Linux動(dòng)態(tài)庫(kù)函數(shù)的詳解的相關(guān)資料,希望通過本文能幫助到大家,讓大家理解掌握這部分的內(nèi)容,需要的朋友可以參考下

Linux動(dòng)態(tài)庫(kù)函數(shù)的詳解

加載動(dòng)態(tài)庫(kù)

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查看

返回動(dòng)態(tài)庫(kù)中最近的一次錯(cuò)誤

char *dlerror(void);

根據(jù)動(dòng)態(tài)庫(kù)句柄和函數(shù)名稱,返回函數(shù)的地址

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

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

關(guān)閉動(dòng)態(tài)庫(kù)

int dlclose(void *handle);

根據(jù)函數(shù)地址,返回函數(shù)名稱和其它信息

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

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;

 構(gòu)造函數(shù)和析構(gòu)函數(shù)(這兩個(gè)是屬性,而不是函數(shù))

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

例如:

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

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

相關(guān)文章

最新評(píng)論