dlfcn.h - dynamic linking
#include <dlfcn.h>
The <dlfcn.h> header defines at least the following macros for use in the construction of a dlopen() mode argument:
RTLD_LAZY
Relocations are performed at an implementation-dependent time.
RTLD_NOW
Relocations are performed when the object is loaded.
RTLD_GLOBAL
All symbols are available for relocation processing of other modules.
RTLD_LOCAL
All symbols are not made available for relocation processing by other modules.
The header <dlfcn.h> declares the following functions which may also be defined as macros. Function prototypes must be provided for use with an ISO C compiler.
void *dlopen (const char *, int);
void *dlsym (void *, const char *);
int dlclose (void *);
char *dlerror (void);
例子:
/*
* test_hook.c
*
單純的測試函數功能,沒有處理出錯
*/
#include<dlfcn.h
>
#include<stdio.h>
int main(int argc, char *argv[])
{
void *libc;
void (*printf_call)();
if(libc = dlopen("libc.so.6", RTLD_LAZY)) //
RTLD_LAZY
表示函數的惰性邦定
{
printf_call = dlsym(libc,
"printf");
(*printf_call)("hello,
world/n");
dlclose(libc);
}
return 0;
}
編譯:
gcc -ldl test_hook.c -o test
》./test
hello,world