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