Поясните , пожалуйста работу исходного кода glibc
Меня интересует реализация загрузки динамических библиотек.
Первое что нужно сделать для загрузки библиотеки это вызвать функцию
Код: Выделить всё
dlopen (const char *file, int mode)
Эта функция вызывает код из glibc
https://sourceware.org/git/?p=glibc.git;a=b...f2f2fd3;hb=HEAD
Код: Выделить всё
72
73 void *
74 __dlopen (const char *file, int mode DL_CALLER_DECL)
75 {
76 # ifdef SHARED
77 if (__glibc_unlikely (_dlfcn_hook != NULL))
78 return _dlfcn_hook->dlopen (file, mode, DL_CALLER);
79 # endif
80
81
........
в этой функции вызывается функция через указатель.
структура _dlfcn_hook определена в файле
https://sourceware.org/git/?p=glibc.git;a=b...9734ad1;hb=HEAD
Код: Выделить всё
89 struct dlfcn_hook
90 {
91 void *(*dlopen) (const char *file, int mode, void *dl_caller);
92 int (*dlclose) (void *handle);
93 void *(*dlsym) (void *handle, const char *name, void *dl_caller);
94 void *(*dlvsym) (void *handle, const char *name, const char *version,
95 void *dl_caller);
96 char *(*dlerror) (void);
97 int (*dladdr) (const void *address, Dl_info *info);
98 int (*dladdr1) (const void *address, Dl_info *info,
99 void **extra_info, int flags);
100 int (*dlinfo) (void *handle, int request, void *arg, void *dl_caller);
101 void *(*dlmopen) (Lmid_t nsid, const char *file, int mode, void *dl_caller);
102 void *pad[4];
103 };
104
105 extern struct dlfcn_hook *_dlfcn_hook;
Подскажите а где эта структура dlfcn_hook инициализируется ?
И где сама реализация _dlfcn_hook->dlopen (...); ?